2014-09-23 76 views
1

有沒有辦法將以下兩行合併成一行?htaccess mod_rewrite合併

RewriteRule . /pages/article.php [L] 
RewriteRule $ /pages/article.php [L] 

由於它是一個類似的問題(htaccess的指令合併),我還需要幫助鞏固以下到一個單一的產品,以及:提前

SetEnvIfNoCase Referer "^http://www.example.com/" locally_linked=1 
SetEnvIfNoCase Referer "^http://www.example.com$" locally_linked=1 
SetEnvIfNoCase Referer "^http://example.com/" locally_linked=1 
SetEnvIfNoCase Referer "^http://example.com$" locally_linked=1 

感謝。

+0

你是否與這些相匹配?既然既不是錨定,也有非常廣泛的匹配可能性。第一個匹配至少有一個字符,而第二個匹配_anything,任何字符都可以。 (它們當然可以結合使用,但它有助於瞭解意圖) – 2014-09-23 01:36:55

+0

意圖是匹配從root向前的所有內容。在前面添加^會在cPanel子域中產生混亂。本質上,它是當前路徑中的一切(例如網站根目錄)前進 - 匹配所有內容:) – 2014-09-23 01:39:05

回答

1

這兩個RewriteRule指令可以合併,主要是因爲第二個沒有做任何特別有用的事情。 $錨將始終存在於輸入字符串中,以便規則匹配的任何輸入。第一條規則只有一個匹配任何一個字符的.,但由於它沒有^$錨,所以一個字符可以位於字符串中的任何位置。

實質上,這兩者的總和是匹配任何帶有或不帶有字符的字符串。這可以簡化爲:

RewriteRule .* /pages/article.php [L] 

.*將匹配零個或多個字符,而不是捕捉他們重用的變量。沒有必要測試$錨點。


SetEnvIfNoCase可以全部合併,如果你使用一個可選的分組()?的,使後面的斜槓可選的/?。這應該匹配所有4種可能性,因爲www.是可選的,尾隨/是可選的。

SetEnvIfNoCase Referer "^http://(www\.)?example\.com/?$" locally_linked=1 

注意,我逃脫正則表達式的.,因爲他們另有解釋爲元字符,即使技術上也匹配字面.和雙週圍的正則表達式不應實際需要報價,但也沒有害處。

+0

你是一個具有此功能的嚮導。 SetEnvIfNoCase - 可以說不經過測試就可以工作。 RewriteRule另一方面,我相信我在使用時遇到了同樣的問題。* ...給我幾分鐘,我會運行一些測試,看看我是否可以重現這個問題(問題是跳過主頁)... – 2014-09-23 01:48:03

+0

兩者都有效。再次感謝:) – 2014-09-23 01:51:01

+0

不客氣,高興地幫助。 – 2014-09-23 01:52:15