1

我有这种情况:
所有网址都喜欢/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]

现在我想隐藏真实的 url 和对页面的所有直接访问,archive.php但是我收到了这个规则的重定向循环错误:

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

3 回答 3

1

您必须确保您的第一条规则不匹配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]
于 2013-10-18T16:21:45.737 回答
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]
于 2013-10-18T16:32:29.223 回答
0

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

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

于 2013-10-18T16:19:13.970 回答