2011-11-07 87 views
0

我有以下代碼:的.htaccess重寫規則條件

RewriteCond %{HTTP_HOST} ^m\.domain\.com?$ 
RewriteRule^http://domain.com/ipad%{REQUEST_URI} [L,P] 

所以,我的子域,http://m.domain.com是真正從拉http://domain.com/ipad/

一切工作正常,如果我輸入:http://m.domain.com/shop-name/它完美的作品。但是,當我省略斜線並輸入http://m.domain.com/shop-name時,它將重定向到http://domain.com/ipad/shop-name/,這不應該發生,因此沒有人應該看到ipad目錄。

有誰知道我該如何解決這個問題?

謝謝!

+0

是「店鋪名」的目錄?你有權訪問中央Apache配置文件(例如httpd.conf)或這些主機的'VirtualHost'部分嗎? – JMM

+0

這只是另一個RewriteRule。真正的路徑是index.php?shop_name =無論它重定向到/ shop-name/ – Drew

回答

1

這可能是因爲mod_dir在內部處理請求。當你訪問http://m.domain.com/shop-name然後它被重寫爲http://domain.com/ipad/shop-name時,mod_dir 302將瀏覽器重定向到http://domain.com/ipad/shop-name/

您可以嘗試處理RewriteRule中的尾部斜線。可能是一個這樣做的更清潔的方式,而是沿着線的東西:

RewriteCond %{HTTP_HOST} ^m\.domain\.com?$ 
# Has trailing slash in request, don't need to append one in the RewriteRule 
RewriteCond %{THE_REQUEST} ./\ HTTP/1\.[01]$ 
RewriteRule^http://domain.com/ipad%{REQUEST_URI} [L,P] 

RewriteCond %{HTTP_HOST} ^m\.domain\.com?$ 
# Missing trailing slash in request 
RewriteCond %{THE_REQUEST} [^/]\ HTTP/1\.[01]$ 
# Request doesn't end with one of these extensions, 301 redirect to include trailing slash 
RewriteCond %{REQUEST_FILENAME} !\.(php|html?|jpg|gif)$ 
RewriteRule . http://m.domain.com%{REQUEST_URI}/ [R=301] 

編輯:編輯解決301重定向缺少結尾的斜線

+0

嘿,非常感謝,它的工作!爲了保持我的鏈接一致,我想強制一個斜線,所以如果他們在/店名的時間將重定向到/ shop-name /目前似乎沒有這樣做。我在我的htaccess文件中嘗試了一些不同的片段來強制結尾的斜槓,但無法使其工作。我試過這個: #強制拖尾斜槓 RewriteCond%{REQUEST_FILENAME}!\。(php | html?| jpg | gif)$ RewriteRule^[^ /] + $%{REQUEST_URI}/[L,R = 301 ] – Drew

+0

請參閱第二次重寫的編輯版本。當缺少斜線時,不要將它從* *斜線後移到domain.com *,301重定向瀏覽器以包含斜槓 –

+0

非常感謝。我感謝你的幫助,它工作的很棒:) – Drew