2012-08-10 88 views
1

我已經設置了通配符域本地測試上.devhtaccess的子域重寫保持WWW

我試圖重寫以下網址:

http://location.domain.dev/ 

http://www.domain.dev/site/location 

我希望子域中的任何請求www始終轉到www.domain.dev,但如果對location.domain.dev發出任何請求,我想在地址欄中保留該請求(即,我不想要p eople看到潛在的變化)

目前,我有我的.htaccess

<IfModule mod_rewrite.c> 
    Options +FollowSymLinks 
    RewriteEngine On 

    RewriteBase/

    RewriteCond %{HTTP_HOST} ^([^.]+)\.domain\.dev 
    RewriteRule ^(.*)$ http://domain.dev/site/%1 [QSA,NC] 

    # Removes index.php 
    RewriteCond $1 !\.(gif|jpe?g|png)$ [NC] 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ /index.php?/$1 [L] 
</IfModule> 

以下是這甚至可能嗎?

回答

0

你非常接近。爲了不重定向瀏覽器(導致地址欄更改),你需要擺脫重寫規則的目標http://domain.dev部分:

RewriteRule ^(.*)$ /site/%1/$1 [QSA,NC] 

假設兩* .domain.devWWW .domain.dev具有相同的文檔根目錄。如果他們是不同的,你可能必須啓用的mod_proxy並添加P標誌,以便請求被改爲代理重定向瀏覽器:

RewriteRule ^(.*)$ http://domain.dev/site/%1/$1 [QSA,NC,P] 
+0

感謝喬恩,如何啓用mod_proxy的?我可以通過.htaccess來做到這一點嗎? 我已經添加了你的代碼,但是,我似乎沒有去重定向後的正確位置。 – 2012-08-10 11:53:03

+0

@HerbageOnion它通過服務器配置(LoadModule)打開,如果它尚未打開。在重定向後不去正確的地方是什麼意思?嘗試將'/ $ 1'添加到目標的末尾。 – 2012-08-10 11:56:56

+0

好吧,我剛剛檢查了httpd.cong並啓用了mod_proxy。我用你的第二條規則,現在工作。最後一個問題是,如果我訪問http://www.domain.dev/(使用www),它會嘗試訪問http://domain.dev/location/www,我該如何停止重寫? – 2012-08-10 12:09:22