2012-02-14 68 views
2

我試圖創建一個.htaccess mod_rewrite的將不同的表現,如果當前的引用者是不是我自己的域名。例如,說我自己的example.com(即www.example.com,http://example.com等)。當有人前往example.com(或beta.example.com等子域)時,我想忽略此.htaccess規則。所以我猜這個正則表達式基本上只是尋找example.com中的某個地方,而忽略它們。的.htaccess確定refferer不是當前域

然而,作爲otherdomain.com這樣一個域(假設通過CNAME或A記錄指向example.com)訪問我的網站,我想他們的地方重定向。這是我迄今爲止所擁有的,我認爲是接近但並不工作。

我的這些規則主要困惑是重寫規則(^ $在這種情況下)後到來的部分。我在Google上看到了一些不同的東西,我不確定這些差異。舉例來說,我也看到只是一個^,一個(。*)$等

RewriteCond %{HTTP_REFERER} !^http://([^.]+\.)*(example)\.com 
RewriteRule ^$ redirectfile.php [L] 

我也一直在搞亂

RewriteCond %{HTTP_REFERER} ^http://(.+\.)*\.com 
RewriteCond %1 !^(example)\.$ 
RewriteRule ^$ redirectfile.php [R=302,L] 

回答

2

嘗試

RewriteCond %{HTTP_REFERER} !^http://([^.]+\.)*example\.com 
RewriteRule^redirectfile.php [L] 

你有^$,這隻會匹配主頁。

我改變它只是^將匹配每一個請求,假設你想每一個要求相匹配。

一個(.*)$也符合每一項要求,同時也捕捉到了比賽,讓你在目標重用用$ 1

+0

感謝這些解釋。但是,這些規則似乎並不奏效。無論如何,它總是重定向。我正在使用random.example.com(這個應該忽略規則)和test.local(它指向同一個服務器,但應遵循規則)進行測試。在每種情況下,我都將它重定向到轉儲$ _SERVER的PHP文件,並且HTTP_REFERER爲空,所以我嘗試使用具有正確值的HTTP_HOST。儘管如此,規則仍然沒有運氣。是否因爲HTTP_HOST不包含像那個正則表達式那樣的http? – joshholat 2012-02-14 14:47:18

+0

所以我最後的聲明必須是這樣。我拿出http部分並使用HTTP_HOST,現在它正在工作。使用HTTP_HOST安全嗎?無論如何,它可能比HTTP_REFERER更可靠,對嗎? – joshholat 2012-02-14 14:48:38

+1

@joshholat'HTTP_HOST'更可靠,但它總會給你,你的請求,而不是你來自的頁面域頁面的域名。如果你需要後者,那麼你應該使用'HTTP_REFERER'。請注意,如果您直接在瀏覽器中鍵入URL,將HTTP_REFERER設爲空白(空字符串),將其加入書籤或來自安全頁面。 – 2012-02-14 14:53:28