如何防止在htaccess无限redirect循环?

我有这种情况:
所有的URL像/sport.html隐藏真正的URL /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] 

现在我想隐藏真正的URL和所有直接访问页面archive.php但我收到redirect循环错误与此规则:

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

我想你实际上找的不是这个:

 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] 

你必须确保你的第一条规则不符合404.html 。 你可以使用RewriteCond 。 有关更多信息,请参阅文档 。

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

基本上这是不可能的,因为Apache的系统隐藏真实的文件。

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