这是我的.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
第一个重写/重写块是将用户重定向到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上的文档绝对是可怕的。我想知道是否有其他人有同样的感受。)
提前致谢。
答案 0 :(得分:14)
答案 1 :(得分:3)
您可以尝试使用此代码:
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
ErrorDocument 404 404.php
Rewritecond %{HTTP_HOST} ^mysite\.com$ [NC]
Rewriterule ^ http://www.mysite.com%{REQUEST_URI} [R=302,NC,L]
验证一切正常后,您可以将R=302
更改为R=301
。
答案 2 :(得分:1)
更改一行
Rewriterule ^(。*)$ http://www.mysite.com/ [r = 301,nc,L,PT]