8

我只是想知道是否有必要在每次添加重写时都包含 RewriteEngine On 和 Rewrite Base /?例如,我想同时使用“从 URL ^ 中删除 QUERY_STRING”和“在一天中的特定时间阻止对文件的访问 ^”(引用自 askapache.com 的示例)

从 URL 中删除 QUERY_STRING

RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} .
RewriteRule ^login.php /login.php? [L]

在一天中的特定时间阻止对文件的访问 ^

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
# If the hour is 16 (4 PM) Then deny all access
RewriteCond %{TIME_HOUR} ^16$
RewriteRule ^.*$ - [F,L]

我可以将它们组合成以下内容吗?

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} .
RewriteRule ^login.php /login.php? [L]
# If the hour is 16 (4 PM) Then deny all access
RewriteCond %{TIME_HOUR} ^16$
RewriteRule ^.*$ - [F,L]

在此先感谢您的时间。

4

2 回答 2

4

是的,RewriteEngine并且RewriteBase只需要指定一次。

于 2013-02-18T23:42:29.070 回答
2

您需要RewriteEngine On在每个具有重写规则的 htaccess 文件中,但只需要一次。否则规则将被忽略。

至于RewriteBase,您只需要将相对 URI 作为目标,或者如果您希望您的规则可移植(因此,如果您将规则从一个目录移动到另一个目录,您只需要更改基础)。例如:

不需要RewriteBase这些规则:

RewriteRule ^login.php /login.php? [L]

RewriteRule ^.*$ - [F,L]

因为/login.php不是相对 URI,所以可以理解,您指的是字面意思,http://domain.com/login.php-just 表示传递,因此无论如何都会忽略基数。

您可能想要使用的实例RewriteBase

RewriteRule ^dir/(.*)$ dir2/$1 [L,R=301]

如果没有RewriteBase /apache,可能会错误地猜测dir2/$1是文件还是 URI 路径,并将您重定向到错误的位置。RewriteBase /然后它将正确重定向。

于 2013-02-18T23:49:09.943 回答