2011-07-04 33 views
1

我必須失去了一些東西很明顯的,但我不能讓它工作mod_rewrite並重定向instedad改寫

我想和子域漂亮的網址,但不是一些目錄我想讀從子站點內容文件:

RewriteEngine On 
RewriteBase/
Options +FollowSymlinks 
RewriteCond %{HTTP_HOST} ^subdomain.example.com 
RewriteRule (.*) http://example.com/subdomain.php 

這些規則的工作,但如果我進入subdomain.example.com我重定向到 example.com/subdomain.php - 但我不想這樣,我只是想在內部重寫url ...

非常感謝!我試過[QSA,L],不工作。

回答

3

如果更換此:

RewriteRule (.*) http://example.com/subdomain.php 

有了這個,我懷疑你期待它會工作:

RewriteRule (.*) subdomain.php 

無需重寫域,除非你真的想重定向到另一個域,您只需要重寫請求以指向適當的文件。事實上,當你發現重寫域會導致重定向。正常情況下,RewriteRule會匹配域之後的所有請求,所以只需路徑和查詢即可。

+0

太棒了!現在它更好:)但古典綜合症,現在不工作圖像,CSS ...我懷疑第一條規則 RewriteCond%{HTTP_HOST}^subdomain.example.com 正在重寫所有內容,我試圖限制它用$符號,但沒有成功。 –

+0

您需要添加一個RewriteCond來排除您不想重寫的文件,或者更改RewriteRule正則表達式以匹配您想要重寫的文件。 Chris下面的答案包含了一些很好的RewriteCond,用於排除存在的文件。 –

+0

看來%{HTTP_HOST}%{REQUEST_URI}能做到這一點!我將更多地嘗試它 –

1

如果您有權訪問您的域的DNS控件,則可以使用通配符('%'或'*')設置一個catchall子域,以指向相同的本地目錄。在那裏,你可以有所有的請求都涉及使用PHP腳本:

Options +FollowSymlinks 
RewriteEngine on 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.+)$ /index.php?p=$1 [L] 

,這將運行所有的請求到該PHP文件。在那裏,您可以檢查所請求域的$ _SERVER變量以及查看子域的檢查器。在那裏它可以使用諸如file_get_contents()子例程之類的東西將相關數據轉發給客戶端,並且如果請求可能是有效的而不是該子域,則具有404或403頭響應。

希望有道理...

+0

我只需要幾個子域名,您的通用解決方案對於更多需求來說非常重要。謝謝 –

+0

它是我使用的一個。爲了方便查看用戶配置文件,我使用了一種類似於偏離藝術的系統。您只需轉到http://$USERID$.mydomain.com/,它會自動進入腳本並從那裏開始。如果您還有靜態內容(如css或圖像),則可以在此處將其上載,並且!-d和!-f確保腳本在試圖運行真實文件時不嘗試運行。 – topherg