2010-10-31 107 views
0

我在Apache的mod_rewrite上遇到了一些麻煩。我試圖讓它做的一件事是隱藏我的一些實現細節,例如,用戶看到URL http://www.mysite.com/login,但Apache用http://www.mysite.com/doc_root/login.php的頁面響應(最好不顯示用戶它是一個PHP文件或目錄結構)。下面是我在我的.htaccess文件:Apache mod_rewrite沒有做任何事情(?)

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^(www.)?mysite.com* 
RewriteRule ^/(\w+) /doc_root/$1.php [L] 

#Redirect http://www.mysite.com to the login page 
RewriteRule ^/?$ https://www.mysite.com/doc_root/login.php 

但是,當我去http://www.mysite.com/login,我得到即使頁面中存在一個404錯誤。我顯然沒有很好的理解mod_rewrite條件和規則是如何工作的,所以任何人都可以告訴我我做錯了什麼?謝謝。

+0

我會打開RewriteLog並將RewriteLogLevel設置爲某個高值。 – 2010-10-31 13:42:44

+0

你最好問這個在Serverfault.com – Bevor 2010-10-31 13:52:02

+0

無法打開RewriteLog - 託管服務不允許它。感謝指導我到serverfault.com,我以前不知道它。 – jay 2010-10-31 21:40:59

回答

0

doc_root取代你所有的東西。這會給你你要求的結果。不過,我不確定是否需要。如果你手動鍵入http://www.mysite.com/index.php,你將如何強迫某人登錄?

此外,如果您嘗試強制所有流量到SSL,最好使用第二個VirtualHost和Redirect而不是mod_rewrite。這些都是問題,可能更適合ServerFault

0
  • 除非你的網站有大量不同的域名,而你只 mysite.com做重寫,你不需要的RewriteCond。 (潛在的問題,除非你設置了UseCanonicalName off,否則阿帕奇喜歡用這個域名混搭,如果名稱不符合它的要求,重寫將不會發生)
  • 在RewriteCond(和RewriteRule)模式中,.與任何字符。在他們之前添加一個反斜槓。 (小錯誤,不應該導致重寫失敗,但它們會匹配像「mysite-com」之類的東西。)
  • mod_rewrite實際上是一個URL到文件名過濾器。儘管通常用於重寫URL到其他URL,但有時如果重寫爲URL並且無法識別,它有時會出現錯誤。 (尤其是如果重寫爲別名,或者不會直接翻譯爲真實文件名)。但是,如果向規則中添加[PT]標誌,它會將重寫的東西視爲URL並將其傳遞到其他過濾器(包括將URL轉換爲文件名的過濾器)。
  • 你真的需要「/ doc_root」嗎?文檔根目錄應該已經在Apache中使用DocumentRoot指令設置,並且不應該需要成爲URL的一部分,除非您在同一個域中有多個應用程序(在這種情況下,它是應用程序根目錄;文檔根目錄不更改)。

UPDATE:

  • 我只是想另一件事:重寫規則.htaccess文件的工作方式不同。阿帕奇喜歡剝離主要的斜線。所以你可能會想要擺脫你模式中的第一個斜線,或者至少讓它成爲可選項(^/?login而不是^/login)。
  • ^/?(\w+)將匹配/doc_root/login.php,並導致重寫到/doc_root/doc_root.php。你應該在你的模式結束時有一個$。
+0

我仍然困惑,但我認爲這是有幫助的。我擺脫了RewriteCond指令,因爲(現在)我只有一個我正在使用的域。根據mod_rewrite是URL到文件名過濾器:我希望服務器響應的文件位於「/home2/interag6/public_html/doc_root/login.php」。這是否意味着我的指令應該是「RewriteRule ^/login /home2/interag6/public_html/doc_root/login.php」? – jay 2010-10-31 21:36:33

+0

你應該可以做到這一點。雖然如果你這樣做,你可以使用'%{DOCUMENT_ROOT}/doc_root/login.php'來代替。但在你做了太多事情之前,看看更新 - 我已經習慣於完全訪問服務器,我沒有考慮.htaccess的特性。 – cHao 2010-10-31 22:26:26