2012-03-13 41 views
0

此配置用於重寫URL到子目錄以進行版本控制,同時還將整個查詢字符串推送到名爲「request」的單個GET變量中,以便從URL中刪除問號。這個.htaccess文件中的第2行和第3行是如何實現的?

RewriteEngine On 
RewriteCond %{ENV:REDIRECT_STATUS} 200 
RewriteRule .* - [L] 
RewriteRule (www/.*)$ 2.0/public/$1 [L] 
RewriteRule ^(.*+)$ 2.0/public/index.php?request=$1 [L] 
DirectoryIndex index.php 

我一起修補了這個,奇妙它適合我的目的,但我仍然不清楚爲什麼不是100%。我需要所有這些線路才能正常工作。具體而言,我需要第2行和第3行的幫助。

我知道[L]標誌停止處理當前請求的重寫,然後發出一個新請求,需要根據規則重新處理(so這可能解釋了第2行)。第3行的目的是什麼?

回答

0

讓我們先來數你的線條,因爲目前還不清楚你指什麼:

1. RewriteEngine On 
2. RewriteCond %{ENV:REDIRECT_STATUS} 200 
3. RewriteRule .* - [L] 
4. RewriteRule (www/.*)$ 2.0/public/$1 [L] 
5. RewriteRule ^(.*+)$ 2.0/public/index.php?request=$1 [L] 
6. DirectoryIndex index.php 

現在,讓我們試着解釋一下每一行表示:

  1. 打開URL重寫。
  2. 如果找到請求的文件
  3. ...然後只是返回並停止。
  4. 否則,如果URL以「www /」開頭,則重定向到子文件夾「2.0/public /」並追加整個請求字符串。
  5. 否則,如果URL在域名後至少有1個字符,則重定向到「2.0/public/index.php?request =」,並將整個請求字符串附加爲參數。
  6. 指定默認處理程序。如果
+0

因此,在這種情況下,您只能重寫URL一次,因爲之後的任何重寫都將停在3? – Luke 2012-03-13 16:49:49

0

2號線首先檢查重定向請求使用ENV:REDIRECT_STATUS,如果它的一個重定向請求,然後將其立即結束在行處理3

你可能要檢查Rewrite Cheat sheet瞭解的其他功能mod_rewrite的。

相關問題