我为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.php
redirect到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]
注意我一段时间没有使用过这个,不能保证你能用它开箱即用。 可能需要一些编辑。