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

Posted

技术标签:

【中文标题】index.php 作为 laravel 网站 url 中的参数【英文标题】:index.php as a parameter in the url of laravel website 【发布时间】:2016-12-10 04:11:25 【问题描述】:

我发现任何 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 从谷歌搜索访问该网站时,这会破坏所有图像。

此外,这是一种不好的 seo 做法,因为会产生重复的内容。

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

【问题讨论】:

这不是.htaccess的问题吗?我使用 CodeIgniter(相同的机制)。当我在 url 中使用 index.php 访问它时,一切仍在正常工作,因为所有链接都指向没有 index.html 的 URL。我认为您的配置也可能有问题。我对 Laravel 没有任何经验或知识。 这是一个 .htaccess 问题 - 公平地说,似乎 laravel 附带的默认 .htaccess 允许这样做 我将在robots.txt 中使用Disallow: /*index.php* 来解决google 的问题。有没有更好的办法? 【参考方案1】:

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

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

我也把关注放到robots.txt

Disallow: /*index.php*

【讨论】:

【参考方案2】:

你的 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?

【讨论】:

感谢您的回答。我使用 nginx 作为网络服务器【参考方案3】:

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

【讨论】:

【参考方案4】:

你也可以简单地做到这一点......

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

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

【讨论】:

以上是关于index.php 作为 laravel 网站 url 中的参数的主要内容,如果未能解决你的问题,请参考以下文章

在阿里云虚拟主机上部署Laravel

删除 url 中的 Index.php 像“laravel-project/public/login”而不是“laravel-project/public/index.php/login”

如何使用index.php生成Laravel 4 URL?

从 laravel 路由中删除 index.php

带有 .htaccess (PHP) 的子域

Laravel - 以 .php 结尾的重定向捕获/重定向 URL