2011-10-05 22 views
0

我正在運行通配符子域。該網站的目標是運行一個虛擬子域。這個功能應該是當主站點的文件 被調用時,它們將被重寫爲乾淨的URL。但是當我調用像xyz.doamin.com/my-file.php這樣的子域 相同的文件時,這應該被重寫,就像它調用該文件時使用子域名的參數,如 domain.com/my-file。 PHP?變種= XYZ。目前我所做的文件調用是這樣的用某些參數重定向文件請求的子域和主站點?

Options +FollowSymLinks 
RewriteEngine on 

## Redirecting all non-www domains to www.domain.com 
RewriteCond %{HTTP_HOST} ^domain.com [NC] 
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,NC,L] 


RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC] 
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC] 
RewriteCond %{QUERY_STRING} ^$ 
RewriteRule ^(.*)$ http://www.domain.com%{REQUEST_URI}?var=%1 [L] 


RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC] 
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC] 
RewriteCond %{QUERY_STRING} !^$ 
RewriteRule ^(.*)$ http://www.domain.com%{REQUEST_URI}?%{QUERY_STRING}&var=%1 [L] 



RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC] 
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC] 
RewriteCond %{QUERY_STRING} ^$ 
RewriteRule ^(.*)$ http://www.domain.com/index.php?subdomain=%1 [L] 


RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC] 
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC] 
RewriteCond %{QUERY_STRING} !^$ 
RewriteRule ^(.*)$ http://www.domain.com%{REQUEST_URI}?%{QUERY_STRING}&subdomain=%1 [L] 

這是拋出一個500內部錯誤的文件調用。

回答

0

規則集4將與規則集1和2重疊。我懷疑這是造成問題。 所以我想所有3需要額外RewriteCond檢查REQUEST_URI

真的,你不應該需要規則集4.只要包括index.php作爲默認應該做的伎倆。除非你不需要像http://www.domain.com/?var=xyz這樣的URL,在這種情況下,你需要規則4,但是你需要將它分成2 - 一個QUERY_STRING和一個沒有,就像規則1和2一樣

另外,isn 't %1從正則表達式在rewriteRule本身而不是先前的rewriteConds?如果是這樣,那麼你的正則表達式是錯誤的,因爲它將var=設置爲整個原始URL。

尋找錯誤日誌是一個好主意,因爲它會給你500錯誤的原因。

編輯:好吧,嘗試這樣的事情(未測試)

## Redirecting all non-www domains to www.domain.com 
RewriteCond %{HTTP_HOST} ^domain.com [NC] 
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L,QSA] 

## Redirecting/requests to index.php 
# Note: Use the QSA flag for handling with or without query string 
RewriteCond %{REQUEST_URI} ^/$ 
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC] 
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC] 
RewriteRule ^(.*)$ http://www.domain.com/index.php?var=%1 [L,QSA] 

## Redirecting /something requests to index.php 
# Note: Use the QSA flag for handling with or without query string 
RewriteCond %{REQUEST_URI} ^/.+$ 
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC] 
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC] 
RewriteRule ^(.*)$ http://www.domain.com%{REQUEST_URI}?var=%1 [L,QSA] 
+0

錯誤日誌有這一行:: mod_rewrite的:達到內部重定向的最大數量。假設配置錯誤。如果需要,使用'RewriteOptions MaxRedirects'來增加限制。, – HardCode

+0

是的,這將是你的規則集4.它永遠不會改變'HTTP_HOST',所以它的結果會一直匹配。正如我所說,你最好完全拋棄它。 – Sodved

+0

'@ Sodved'請參閱編輯的代碼。你的意思是? – HardCode

相關問題