2013-02-18 56 views
3

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

从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

是的,RewriteEngineRewriteBase必须只指定一次。

0

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

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

不需要RewriteBase这些规则:

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

RewriteRule ^.*$ - [F,L] 

因为/login.php是不是相对URI,所以它的了解,你从字面上指的是http://domain.com/login.php-只是意味着pass-通过这样的基地是无视的。

这样的情况:你可能需要使用RewriteBase

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

没有一个RewriteBase /阿帕奇可能会猜测不正确dir2/$1是否是一个文件或URI路径和您重定向到错误的地方。随着RewriteBase /,它会正确重定向。

+0

感谢乔恩,你的回答也解决了我的其他文件夹重定向问题。非常感谢您的意见。 – bernie 2013-02-19 00:02:18