Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Обратите внимание на URL
https://laravel.ru/index.php/posts/1125
https://laravel.ru/posts/1125
Открывается одна и та же страницы. Для поисковой системы это дубли. Как решить этот баг. Такая проблема на всех сайтах Laravel
Прикладываю свой htaccess.
Прошу не путать проблемы с DocumentRoot, когда не правильно настроен вследствие чего появляется "public/index.php" - это не тот случай.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Handle Front Controller...
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
Не в сети
Есть как минимум два выхода: <link rel=canonical> чтобы поисковик знал правильный вариант и рерайт адреса.
https://support.google.com/webmasters/a … 9066?hl=en
https://stackoverflow.com/q/25105872/272885
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Вот тут ещё рерайты для nginx есть: https://laracasts.com/discuss/channels/ … completely
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
RewriteCond %{THE_REQUEST} /index\.php [NC]
RewriteRule ^(.*?)index\.php[^/] /$1? [L,R=302,NC,NE]
RewriteCond %{THE_REQUEST} /index\.php [NC]
RewriteRule ^(.*?)index\.php(?:/(.*))?$ /$1$2? [L,R=302,NC,NE]
Данное решение мне помогло.
С canonical сложнее,
<link rel="canonical" href="{{ url()->current() }}" />
Формирует URL с /index.php/other/url/map
В таком варианте нужно будет использовать str_replace
Не в сети
В таком варианте нужно будет использовать str_replace
Даже если так, можно один раз написать функцию-хелпер canonical(), впендюрить в неё всю нужную логику и использовать её в шаблонах.
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
https://laravel.ru/index.php/posts/1125
https://laravel.ru/posts/1125
я уже 5 лет на связке nginx+phpfpm
у меня в принципе нет таких ссылок-дупов.
вот вам конфиг вирт хоста
<FQDN> - Fully qualified domain name - Полное имя домена == ставьте своё.
server {
server_name <FQDN>;
root /path/to/public;
access_log /path/to/log/<FQDN>-access.log;
error_log /path/to/log/<FQDN>-error.log;
include /etc/nginx/snippets/defaults.conf;
client_max_body_size 0;
client_body_buffer_size 16k;
location ~ \\.php$ {
try_files $uri /index.php =404;
include fastcgi_params;
fastcgi_pass unix:/var/run/php/php-fpm.h.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param X-Real-IP $remote_addr;
fastcgi_param X-Forwarded-Ssl on;
fastcgi_param X-Forwarded-For $proxy_add_x_forwarded_for;
fastcgi_param X-Forwarded-Proto $scheme;
}
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/<FQDN>/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/<FQDN>/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
server {
if ($host = <FQDN>) {
return 301 https://$host$request_uri;
}
listen 80;
server_name <FQDN>;
return 404;
}
Надо будет полный набор конфы - посмотрите мои статьи, там чтото есть старенького.
Совсем приспичет - напишу новую.
Ну или за вознаграждение подниму вам ферму.
Не в сети
Страницы 1