index.php作为laravel网站url中的参数

时间:2016-08-04 07:02:15

标签: php laravel nginx laravel-5 googlebot

我发现可以使用index.php作为参数访问任何laravel网站。

这是一个大问题,url参数中的index.php会破坏所有图像。 看一个真实的例子来理解我的意思:

http://www.cyprusalive.com/main-thing/sightseeing
http://www.cyprusalive.com/index.php/main-thing/sightseeing

Googlebot使用index.php读取一些url作为url的参数。当有人通过google搜索使用index.php访问网站时,这会影响所有图像。

此外,这是一个糟糕的搜索引擎优化实践,因为产生了重复的内容。

解决这个问题的最佳方法是什么?

4 个答案:

答案 0 :(得分:2)

问题可以通过nginx rewrite rules解决。使用下面的规则将带有index.php参数的所有网址重定向到original laravel route url

location /index.php {
      rewrite ^/index.php(.*)$ http://$server_name$1;
}

此外,我已将关注点放在robots.txt

Disallow: /*index.php*

答案 1 :(得分:1)

您的webroot或公共文件夹中是否有Laravel提供的.htaccess文件?

如果没有,请尝试将其放在公共目录中的.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 ^(.*)/$ /$1 [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

此外,您可能需要检查是否为您的网络服务器启用了重写模式。

参考How to check whether mod_rewrite is enable on server?

答案 2 :(得分:0)

由于您使用的是NGINX,请检查this

答案 3 :(得分:0)

你也可以这样做......

1.打开apache \ conf \ httpd.conf并搜索此行

#LoadModule rewrite_module modules / mod_rewrite.so  2.然后删除[#]并保存,然后重启apache