index.php 作为 laravel 网站的 url 中的参数
index.php as a parameter in the url of laravel website
我发现任何 laravel 网站都可以使用 index.php 作为参数访问。
这是一个大问题,url参数中的index.php破坏了所有图像。
看一个真实的例子来理解我的意思:
http://www.cyprusalive.com/main-thing/sightseeing
http://www.cyprusalive.com/index.php/main-thing/sightseeing
Googlebot 使用 index.php 作为 url 的参数读取了一些 url。当有人通过 index.php.index.php 搜索访问网站时,这会破坏所有图像。
此外,这是一种糟糕的 SEO 做法,因为会产生重复的内容。
解决该问题的最佳方法是什么?
您的 webroot 或 public 文件夹中是否有随 Laravel 提供的 .htaccess
文件?
如果没有,请尝试将其放入 public 目录中的 .htaccess
文件中:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ / [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>
直接从 Laravel GitHub 中获取此 .htaccess
。
此外,您可能需要检查是否为您的网络服务器启用了重写 mod。
引用How to check whether mod_rewrite is enable on server?
由于您使用的是 NGINX,请检查 this
你也可以简单地做到这一点......
1.Open apache\conf\httpd.conf 并搜索这一行
#LoadModule rewrite_module modules/mod_rewrite.so
2.then 删除 [#] 并保存,然后重新启动 apache
问题可以通过 nginx rewrite rules 解决。使用波纹管规则将所有带有 index.php
参数的 url 重定向到 original laravel route url
location /index.php {
rewrite ^/index.php(.*)$ http://$server_name;
}
此外,我已将以下内容添加到 robots.txt
Disallow: /*index.php*
我发现任何 laravel 网站都可以使用 index.php 作为参数访问。
这是一个大问题,url参数中的index.php破坏了所有图像。 看一个真实的例子来理解我的意思:
http://www.cyprusalive.com/main-thing/sightseeing
http://www.cyprusalive.com/index.php/main-thing/sightseeing
Googlebot 使用 index.php 作为 url 的参数读取了一些 url。当有人通过 index.php.index.php 搜索访问网站时,这会破坏所有图像。
此外,这是一种糟糕的 SEO 做法,因为会产生重复的内容。
解决该问题的最佳方法是什么?
您的 webroot 或 public 文件夹中是否有随 Laravel 提供的 .htaccess
文件?
如果没有,请尝试将其放入 public 目录中的 .htaccess
文件中:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ / [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>
直接从 Laravel GitHub 中获取此 .htaccess
。
此外,您可能需要检查是否为您的网络服务器启用了重写 mod。
引用How to check whether mod_rewrite is enable on server?
由于您使用的是 NGINX,请检查 this
你也可以简单地做到这一点......
1.Open apache\conf\httpd.conf 并搜索这一行
#LoadModule rewrite_module modules/mod_rewrite.so 2.then 删除 [#] 并保存,然后重新启动 apache
问题可以通过 nginx rewrite rules 解决。使用波纹管规则将所有带有 index.php
参数的 url 重定向到 original laravel route url
location /index.php {
rewrite ^/index.php(.*)$ http://$server_name;
}
此外,我已将以下内容添加到 robots.txt
Disallow: /*index.php*