【发布时间】:2012-05-13 18:29:10
【问题描述】:
这是我的 .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) 错误日志中生成以下条目:
[2012 年 5 月 4 日星期五 01:54:19] [错误] [客户端 109.109.109.109] mod_rewrite: 达到内部重定向的最大数量。假设配置错误。如有必要,使用“RewriteOptions MaxRedirects”增加限制。
我假设发生的情况是不知何故生成了无限循环。
我想知道如果满足第一个条件,是否告诉 .htaccess 文件停止处理命令会解决问题。那么有人知道怎么做吗?
(旁注。总的来说,我发现 .htaccess 上的文档非常可怕。我想知道是否其他人也有类似的感觉。)
提前致谢。
【问题讨论】:
标签: .htaccess mod-rewrite redirect