我只是想知道是否有必要在每次添加重写时包含RewriteEngine On和Rewrite Base?例如,我想同时使用“从URL删除QUERY_STRING”和“在一天中的某些时段阻止访问文件^”(引自askapache.com的示例)
从网址
中删除QUERY_STRINGRewriteEngine 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]
提前感谢您的时间。
答案 0 :(得分:4)
是的,RewriteEngine
和RewriteBase
只需指定一次。
答案 1 :(得分:1)
在每个具有重写规则的htaccess文件中都需要RewriteEngine On
,但只需要一次。{p>否则规则将被忽略。
对于RewriteBase
,如果您将相对URI作为目标,或者您希望规则是可移植的,则只需要更改基数(如果您将规则从一个目录移动到另一个)。例如:
这些规则不需要RewriteBase
:
RewriteRule ^login.php /login.php? [L]
RewriteRule ^.*$ - [F,L]
由于/login.php
不是相对URI,因此您可以理解为您实际上是指http://domain.com/login.php
而-
只是意味着传递,因此无论如何都会忽略基数。
您可能希望使用RewriteBase
的实例:
RewriteRule ^dir/(.*)$ dir2/$1 [L,R=301]
如果没有RewriteBase /
apache,可能会错误地猜测dir2/$1
是文件路径还是URI路径,并将您重定向到错误的位置。使用RewriteBase /
,它会正确重定向。