我的public_html中的.htaccess文件有:
RewriteEngine on
RewriteRule ^testfolder/(.*)$ /$1 [R=301,L,NC]
RewriteRule ^(.*)$ testfolder/$1
根据我用来测试输出的http://htaccess.madewithlove.be/
当我输入http://www.mydomain.com/testfolder/aaa/bbb时,我得到:
This rule was met, the new url is http://www.mydomain.com/aaa/bbb
Test are stopped, because of the R in your RewriteRule options. A redirect will be made with status code 301
有没有办法执行301重定向,使浏览器栏中的网址“更漂亮” 同时继续尝试在htacess文件中进一步匹配模式?
我在www.mydomain.com/testfolder上有我的codeigniter项目。我的第一条规则是:
RewriteRule ^testfolder/(.*)$ /$1 [R=301,L,NC]
是重写对控制器的任何导航栏请求,其格式为:www.mydomain.com/testfolder/controller/method to www.mydomain.com/testfolder/controller/method。第二条规则是任何人www.mydomain.com/controller/method将内部使用它转入www.mydomain.com/testfolder/controller/method
提前谢谢你,
比尔
附录 - 我目前的.htaccess文件:
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+b1/(.*)\s [NC]
RewriteRule ^ /$1 [R=302,L]
RewriteCond %{ENV:REDIRECT_STATUS} !200
RewriteRule ^(.*)$ /b1/$1 [L]
答案 0 :(得分:1)
没有。一旦客户端被重定向,就会发生新请求,并使用新URL重新开始重写。
答案 1 :(得分:1)
首先,你的规则存在缺陷,肯定会导致无限循环。
原因是第一条规则是在外部将/testfolder/aaa/bbb
重定向到/aaa/bbb
。
现在,重定向后第二条规则也将启动,因为您只是在那里匹配.*
并且内部转发到/testfolder/aaa/bbb/
,该规则将导致第一条规则再次开始,这将导致无限循环。
不知道您的意图,但您可以使用此代码来避免循环:
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+b1/([^\s]+)\s [NC]
RewriteRule ^ /$1 [R=302,L]
RewriteRule ^(.*)$ /b1/$1 [L,P]
验证一切正常后,将R=302
替换为R=301
。在测试mod_rewrite规则时,请避免使用R=301
(永久重定向)。