301重定向后你能继续匹配htaccess模式吗?

时间:2013-06-03 01:21:55

标签: .htaccess mod-rewrite url-rewriting

我的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]

2 个答案:

答案 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(永久重定向)。