这是我的 .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
第一个 rewritecond / rewriterule 块是如果用户输入的地址没有 www,则将用户重定向到 www。
第二个 rewritecond / rewriterule 块是将用户重定向到我创建的页面,如果他们输入不存在的地址。
这些规则中的每一个都是独立的:
如果我的 .htaccess 文件只包含第一个块,那么它成功地将非 www 地址重定向到 www 地址。
如果输入了一个不存在的地址,用户将成功重定向到我的页面 404.php。
但是,如果 .htaccess 文件包含这两个块,并且输入了非 www 地址,则不会成功重定向到 www 地址,而是会发生以下情况:
(1) 页面显示如下:
永久移动
文档已移至此处。
此外,在尝试使用 ErrorDocument 处理请求时遇到 500 Internal Server Error 错误。
Apache/1.3.41 服务器在 mysite.com 端口 80
(2) 在错误日志中生成以下条目:
[Fri May 4 01:54:19 2012] [error] [client 109.109.109.109] mod_rewrite:达到内部重定向的最大数量。假设配置错误。如有必要,使用“RewriteOptions MaxRedirects”来增加限制。
我假设发生的事情是以某种方式生成了一个无限循环。
我想知道如果满足第一个条件,是否告诉 .htaccess 文件停止处理命令可以解决问题。那么有人知道该怎么做吗?
(旁注。总的来说,我发现 .htaccess 上的文档非常可怕。我想知道其他人是否也有类似的感觉。)
提前致谢。