簡體   English   中英

Apache .htaccess mod_rewrite和清理網址

[英]Apache .htaccess mod_rewrite and clean urls

好。 因此,我正在構建可通過兩個不同域訪問的站點。 所以我不能在.htaccess中使用RewriteBase。 我用來解決此問題的規則(如下)似乎工作正常。 但是,當我在帶有干凈URL(WAMP)的本地框上使用以下.htaccess設置時,一切正常,但是當我在實時服務器(共享托管LAMP)的實時服務器上使用它時,導航到的每個頁面都會顯示主頁(我猜是索引下的一個),即使瀏覽器中的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>

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

  • 盧克

也許最好的辦法是在本地框中重現問題,然后打開RewriteLogLevel,以便您查看發生了什么。 (由於您通常無法更改共享主機上的日志級別)

您可以通過在Apache主配置中重寫目錄來“模擬”問題。 (共享托管顯然要在到達.htaccess之前進行自己的重寫!)如果無法重現該問題,則可能必須在遠程服務器上啟動試錯調試。 這很丑陋,但是如果這是您唯一的選擇:

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

不要忘記在正則表達式中轉義!

附帶說明一下,在其上方的RewriteConds之前先匹配RewriteRule模式。 這種設置可能會更好地提高性能:

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

請注意,我尚未對此進行測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM