如何防止htaccess上的无限重定向循环?

时间:2013-10-18 16:13:05

标签: php apache .htaccess mod-rewrite redirect

我有这种情况:
所有网址/sport.html都会隐藏真实的网址/archive.php?action=search&section=sport

#This is the RULE:
RewriteRule ^([a-zA-Z_]+([a-zA-Z0-9_]+)?)(-([0-9]+))?\.html$ /archive.php?action=search&section=$1 [L]

现在我想要隐藏真实的网址并直接访问网页archive.php,但我收到了此规则的重定向循环错误:

RewriteRule ^archive\.php.*$ /404.html [F,NC,L]

3 个答案:

答案 0 :(得分:1)

您必须确保您的第一条规则与404.html不符。您可以使用RewriteCond。有关详细信息,请参阅the documentation

RewriteCond %{REQUEST_URI} !^404\.html$
RewriteRule ^([a-zA-Z_]+([a-zA-Z0-9_]+)?)(-([0-9]+))?\.html$ /archive.php?action=search&section=$1 [L]

答案 1 :(得分:1)

我认为你真正想要的不是这个:

RewriteRule ^archive\.php.*$ /404.html [F,NC,L]

很明显,这会导致循环,因为你的第一条规则是重写为archive.php,而这条规则会将其重写为其他内容等等。

尝试此操作而不是上述规则:

RewriteCond %{THE_REQUEST} \ /archive\.php
RewriteRule ^ /404.html [F,L]

或者,如果你想看中它:

RewriteCond %{THE_REQUEST} \ /archive\.php\?action=search&section=([^&\ ]+)
RewriteRule ^ /%1.html [R,L]

答案 2 :(得分:0)

由于Apache的系统,基本上不可能隐藏真实文件。

但是在archive.php中,如果不是“sports.html”,您可以测试当前网址并将其重定向到sport.html。