0

我有這樣的代碼在.htaccess:Apache的子域名重定向到文件夾,保存參數

RewriteEngine on 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !\.(css|gif|ico|jpg|js|png|swf|txt)$ 

# If empty subdomain, replace with "www" 
RewriteCond %{HTTP_HOST} ^example.com$ 
RewriteRule ^(.*) http://www.example.com/$1 [QSA,L,R=301] 

# If subdomain isn't empty and not "www", redirect to "folder" 
RewriteCond %{HTTP_HOST} !^www\.example\.com 
RewriteCond %{HTTP_HOST} ^(.*)\.example\.com$ 
RewriteRule (.*) http://www.example.com/%1/$1 [QSA,R=301] 

#PAGES REDIRECTION 
RewriteRule ^(.*)/register/ /index.php?sub=$1&page=register 
RewriteRule ^(.*)/register /index.php?sub=$1&page=register 
RewriteRule ^(.*)/lostpass/ /index.php?sub=$1&page=lostpass 
RewriteRule ^(.*)/lostpass /index.php?sub=$1&page=lostpass 
... 

(通配符subdmains規則已經到位,工作)

如果我瀏覽到HTTP: //test.example.com它正確重定向到http://www.example.com/test但是當我嘗試瀏覽到http://test.example.com/register,它實際上重定向到http://www.example.com/test/index.php?sub=http://www.example.com/test & page = register其中應該重定向到http://www.example.com/測試/寄存器

我在這裏做錯了什麼?提前致謝!

回答

0

嘗試將L標誌添加到您的第二個重定向規則中,類似於第一條中的方式。

RewriteRule (.*) http://www.example.com/%1/$1 [QSA,R=301,L] 

它看起來像你重寫的URI是passing through to the next rule

此外,我不認爲你的前兩個RewriteCond是在正確的位置。

+0

謝謝。我添加了L標誌,即使我沒有注意到使用上的任何重大差異,我想它會更好。我是新來的,那些RewriteCond應該在哪裏? – rtrudel

+0

RewriteConds應該在它們適用的規則之前。因爲它們只適用於第一條規則,並且似乎是不必要的。通常情況下,您會在一般捕捉將請求轉發給腳本的所有規則之前看到這些條件。 – matthew

相關問題