1

我的 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 重定向以使浏览器栏中的 url 更漂亮,同时继续尝试在 htacess 文件中进一步匹配模式?

我在 www.mydomain.com/testfolder 中有我的 codeigniter 项目。我的第一条规则:

RewriteRule ^testfolder/(.*)$ /$1 [R=301,L,NC] 

是将所有导航栏请求重写为以下形式的控制器:www.mydomain.com/testfolder/controller/method 到 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]
4

2 回答 2

2

首先你的规则是有缺陷的,肯定会导致无限循环

原因是第一条规则从外部重定向/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=302R=301. R=301在测试你的 mod_rewrite 规则时避免使用(永久重定向)。

于 2013-06-03T01:57:54.183 回答
1

不会。一旦客户端被重定向,就会出现一个新请求,并使用新 URL 重新开始重写。

于 2013-06-03T01:45:36.067 回答