.htaccess - 如果rewriterule为true,则停止处理?

oyv*_*vey 12 .htaccess mod-rewrite redirect

这是我的.htaccess文件:

Options +FollowSymlinks
RewriteEngine on

Rewritecond %{http_host} ^mysite.com [nc]
Rewriterule ^(.*)$ http://www.mysite.com/$1 [r=301,nc]

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule . /404.php
Run Code Online (Sandbox Code Playgroud)

第一个重写/重写块是将用户重定向到www,如果他们输入的地址没有www.

第二个rewritecond/rewriterule块用于将用户重定向到我创建的页面,如果他们输入不存在的地址.

这些规则中的每一个都是独立运作的:

如果我的.htaccess文件只包含第一个块,则它会成功将非www地址重定向到www地址.

如果输入了不存在的地址,则用户成功重定向到我的页面404.php.

但是,如果.htaccess文件包含两个块,并且输入了非www地址,则会发生以下情况,而不是成功重定向到www地址:

(1)页面上显示以下内容:

永久移动

该文件已移至此处.

此外,尝试使用ErrorDocument处理请求时遇到500内部服务器错误错误.

mysite.com端口80的Apache/1.3.41服务器

(2)在错误日志中生成以下条目:

[2012年5月4日星期五01:54:19] [错误] [客户端109.109.109.109] mod_rewrite:达到的内部重定向的最大数量.假设配置错误.如有必要,使用"RewriteOptions MaxRedirects"增加限制.

我假设发生的是无限循环以某种方式生成.

我想知道如果第一个条件得到满足,是否告诉.htaccess文件停止处理命令可以解决问题.那么有谁知道如何做到这一点?

(旁注.总的来说,我发现.htaccess上的文档绝对是可怕的.我想知道是否有其他人感觉相似.)

提前致谢.

mat*_*ser 15

[L]标志.

http://httpd.apache.org/docs/2.4/rewrite/flags.html

  • 我接受了您的建议,因此对我的文件的唯一更改是第一个重写规则具有以下内容:`Rewriterule ^(.*)$ http://www.mysite.com/$1 [r=301,nc,L] ` 现在似乎一切正常。谢谢你。 (2认同)