2013-02-18 76 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