删除index.php url重写.htaccess

我为301 redirect编写了这个代码

 RewriteCond %{THE_REQUEST} ^.*\/index\.php\ HTTP/ RewriteRule ^(.*)index\.php$ /$1 [R=301,L] 

如果我访问我的网站http://mysite.com/index.php ,它会很好地工作,它会将我redirect到http://mysite.com

但在我的localhost如果我试图访问index.php localhost/mysite/index.phpredirect到localhost

我怎么能解决这个问题? 上面写的代码是正确的吗?

它看起来像你的服务器上的文档根目录中的htaccess文件,并在本地主机上的mysite目录。 由于htaccess文件的位置对于如何路由URI非常重要,因此您需要使其对文件的位置无关紧要。 您可以通过从条件中提取路径信息而不是传入规则的URI来匹配:

 RewriteCond %{THE_REQUEST} ^[AZ]{3,9}\ /(.*)index\.php($|\ |\?) RewriteRule ^ /%1 [R=301,L] 

%{THE_REQUEST}变量是实际HTTP请求的第一行,如下所示:

 GET /path/index.php HTTP/1.1 

该模式首先匹配任何数量的可能的方法 (GET,POST,HEAD等),然后创建一个在index.php 之前的URI路径的分组,然后结束匹配,因为我们并不在乎index.php

尝试这个

 RewriteRule ^(.*)index\.php$ /$1 [R=301,NC] 

如果您的站点不在服务器的根目录(不在本地主机上),则需要添加一个RewriteBase指令: https : RewriteBase

您需要添加行:

 RewriteBase /mysite/ 

在你本地主机上的htaccess的当前行之上

虽然RewriteBase指令代表这种用法,但是您可能需要测试localhost,并且只有在test == true的情况下才能将root重写到您的子目录。 例如:

 RewriteCond %{HTTP_HOST} ^localhost$ RewriteCond %{REQUEST_URI} !^/subdirectory/ RewriteRule (.*) /subdirectory/$1 [L] 

注意我一段时间没有使用过这个,不能保证你能用它开箱即用。 可能需要一些编辑。