我有这种情况:
所有网址/sport.html
都会隐藏真实的网址/archive.php?action=search§ion=sport
#This is the RULE:
RewriteRule ^([a-zA-Z_]+([a-zA-Z0-9_]+)?)(-([0-9]+))?\.html$ /archive.php?action=search§ion=$1 [L]
现在我想要隐藏真实的网址并直接访问网页archive.php
,但我收到了此规则的重定向循环错误:
RewriteRule ^archive\.php.*$ /404.html [F,NC,L]
答案 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§ion=$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§ion=([^&\ ]+)
RewriteRule ^ /%1.html [R,L]
答案 2 :(得分:0)
由于Apache的系统,基本上不可能隐藏真实文件。
但是在archive.php中,如果不是“sports.html”,您可以测试当前网址并将其重定向到sport.html。