2012-03-11 43 views
5

可能重複:
Apache rewrite based on subdomain如何將一個子域重寫爲一個URL中的變量?

是否有可能改寫這樣的網址?

www.foo.website.com/some-page 

www.website.com/some-page?var=foo 

我問一個重寫(我認爲這是它叫什麼),而不是重定向。即我希望第一個URL保留在地址欄中,但服務器要「獲取」第二個URL。

我從來沒有明白怎麼做URL重寫,到目前爲止,我可憐的嘗試得到這個工作非常失敗:-)

我要補充一點,.htaccess文件也被用於由WordPress的和有以下代碼:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase /~kbj/ 
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /~kbj/index.php [L] 
</IfModule> 

任何幫助或建議將非常感激!

+2

http://stackoverflow.com/questions/49500/apache-rewrite-based-on-subdomain – 2012-03-11 16:32:34

回答

2

我將解釋爲多語言的網站,但你可以很容易應用此你問:重命名「LANGUAGE」到「var」(笑)。

以下是您可能想要做的事情,以便將來能夠處理許多子語言。 檢查你的主機:如果它包含一個「已知語言」,將其添加到全局變量(=從Apache的角度來看環境變量),然後最後,如果沒有設置「語言」變量,則設置爲默認語言。最後,將其添加爲參數。

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{HTTP_HOST} ^www\.([^.]+)\.website\.com$ 
    RewriteRule ^(.*)$ "http://www.website.com/$1?var=%1" [P] 

    RewriteCond %{HTTP_HOST} ^(www\.)?(us|fr|pt)\.mydomain\.com$ 
    # Create an environment variable to remember the language: 
    RewriteRule (.*) - [QSA,E=LANGUAGE:%2] 
    # Now check if the LANGUAGE is empty (= doesn't exist) 
    RewriteCond %{ENV:LANGUAGE} ^$ 
    # If so, create the default language (=es): 
    RewriteRule (.*) - [QSA,E=LANGUAGE:es] 
    # Add the language to the URI (without modifying it): 
    RewriteCond (.*) $1?language={ENV:LANGUAGE} [QSA] 

</IfModule> 

(請注意:請使用正確的縮進)。

0

試試這個:

RewriteCond %{HTTP_HOST} ^([^.]+).domain.com$ 
RewriteRule (.*) http://www.domain.com/$1?subdomain=%1 

它需要的一切它找到一個子域並將其映射到主域名的附帶作爲GET參數的子域名文件。

2
RewriteCond %{HTTP_HOST} ^www\.([^.]+)\.website\.com$ 
RewriteRule ^(.*)$ "http://www.website.com/$1?var=%1" [P] 

使用P標誌來代理請求。

http://httpd.apache.org/docs/current/rewrite/flags.html#flag_p

+0

感謝您的回覆。我嘗試使用你建議的代碼,但不幸的是它沒有工作。我嘗試從.htaccess文件中除去http://pastebin.com/4i7LKn48,然後瀏覽到www.test.website.com,並且出現「找不到服務器」錯誤。任何想法爲什麼它不工作?再次感謝你的幫助。 – Nate 2012-03-11 23:10:47

相關問題