2008-11-03 147 views
0

好的。所以我正在建設這個網站,可以通過兩個不同的領域訪問。所以我不能在我的.htaccess中使用RewriteBase。我用來解決這個問題的規則(下面)似乎工作正常。但是,當我使用乾淨的URL(WAMP)在我的本地盒子上使用下面的.htaccess設置時,它一切正常,但是當我在實時服務器上使用它時(共享主機LAMP),我導航到的每個頁面顯示主頁一個在我猜的索引下),即使瀏覽器中的URL明顯被更新。Apache .htaccess mod_rewrite和乾淨的URL

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_URI} ^/domain1.com/(.*)$ 
    RewriteRule ^(.*)$ /domain1.com/index.php?q=$1 [L,QSA] 

    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_URI} ^/domain2.com/(.*)$ 
    RewriteRule ^(.*)$ /domain2.com/index.php?q=$1 [L,QSA] 
</IfModule> 

任何幫助或想法都非常感謝。

  • 盧克
+0

您是否已驗證mod_rewrite是否在您的實時服務器上正確啓用?如果是這樣,您是否驗證過其他適用於Apache的適用設置在您的測試服務器和實時服務器之間也是相同的? – 2008-11-03 22:19:34

回答

2

可能做的最好的事情是重現您的本地箱的問題,並調高RewriteLogLevel所以你可以看到發生了什麼事情。 (因爲您通常無法更改共享主機上的日誌級別)

您可以通過在Apache主配置中執行目錄重寫來「模擬」該問題。 (共享主機在進入.htaccess之前顯然會進行自己的重寫!)如果無法重現問題,則可能需要在遠程服務器上啓動試錯功能。這是醜陋的,但是如果它是你唯一的選擇:

在替換中使用R(重定向)標誌將任何重寫的URL發送回瀏覽器。使用TELNET(或適當的瀏覽器插件)檢查HTTP響應。

不要忘了在正則表達式中逃脫點!

作爲一個附註,RewriteRule模式在它上面的RewriteConds之前匹配。這種設置可能是更好的性能:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^/domain1\.com/(.*)$ /domain1.com/index.php?q=$1 [L,QSA] 
#     ^should be escaped 

請注意,我沒有測試過這一點。