如何通过htaccess删除index.php [高级]

时间:2017-05-09 21:57:08

标签: php .htaccess mod-rewrite

我正在使用codeigniter。始终有一种方法可以从url中删除index.php。代码跟随htaccess,它工作正常。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L] 

但问题是:我们仍然可以像index.php一样访问网站。

两者都可以访问:

 http://www.yoursite.com/index.php/cat/subcat 
 http://www.yoursite.com/cat/subcat 

可以通过htaccess强制删除index.php吗?我实际上不希望谷歌同时拥有相同页面的重复副本。欢迎任何建议

1 个答案:

答案 0 :(得分:3)

.htaccess文件的顶部尝试以下操作:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php
RewriteRule ^index\.php/?(.*) /$1 [R=302,L]

这将检查初始请求中是否存在/index.php(而不仅仅是重写的请求),然后重定向到后面的URL路径(如果是)。通过专门检查THE_REQUEST,您可以避免重定向循环。

尾部斜杠是可选的,因此它还会捕获/index.php的请求。

当您确定它正常工作时,将302(临时)更改为301(永久)。