14

这是我的 .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 上的文档非常可怕。我想知道其他人是否也有类似的感觉。)

提前致谢。

4

3 回答 3

18

[L] 标志。

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

于 2012-05-04T08:05:19.563 回答
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=302R=301.

于 2012-05-04T08:47:13.617 回答
1

换一行

重写 ^(.*)$ http://www.mysite.com/ [r=301,nc,L,PT]

于 2013-08-20T11:16:46.380 回答