2010-08-31 61 views
0

我想獲得一個子域重寫工作使用Apache htaccess文件,需要一些幫助,請。htaccess - 重寫請求的子域到一個文件夾,與查詢字符串

我試圖獲得HTTP請求:// XYZ .example.com的內部處理彷彿用戶曾要求http://example.com/ XYZ所以用戶在他們的地址欄中沒有看到這個URL - 他們看到了子域版本。

這是輕微的事實,任何跟隨這需求如果用戶請求HTTP進行過傳遞,例如複雜:// XYZ .example.com的/測試/字/ X = 123然後這需要由服務器處理,就好像他們已經訪問過http://example.com/ xyz/test/word /?x = 123

該網站上的代碼點火器框架,它有它自己的htaccess規則太運行,但我想這將改寫首先要做那些前踢英寸

任何幫助將不勝感激!

+0

使用'[QSA]'來通過GET參數 – 2010-08-31 19:46:25

+0

Codeigniter是否在站點根目錄或'xyz'中? – 2010-08-31 19:58:43

+0

您好蒂姆 - 代碼點火器是在網站的根目錄http://example.com。我有一個創建了A記錄的子域,它指向與此根域相同的IP – GSA 2010-09-01 08:36:15

回答

0

以下mod_rewrite規則集應該執行你需要重寫:

RewriteCond $0 !^(index\.php/)?xyz 
RewriteCond %{HTTP_HOST} ^xyz\. 
RewriteRule ^.*$ /xyz/$0 [L] 

查詢字符串被自動地傳承下去,因爲我們還沒有在改寫改變了它。

對於CodeIgnitor來選擇這個改變,你需要使用PATH_INFO作爲路由信息的來源。你$config['uri_protocol']需要被設置爲PATH_INFOAUTO這是事實,你的CodeIgnitor RewriteRule看起來應該像下面這樣:

RewriteRule ^.*$ /index.php/$0 

如果你遇到麻煩,試圖用PATH_INFO,你需要找到一種方法讓CodeIgnitor解析$_SERVER['REDIRECT_URL'](並將L標誌添加到上面的第一個RewriteRule)。希望這不應該是必要的,但如果你不能得到它的工作,否則我會研究你將如何做到這一點。

+0

您好蒂姆,感謝您的調查。然而奇怪的是,儘管設置了PATH_INFO,我仍然得到了403禁止的錯誤。在error_log中顯示「文件名太長:無法將GET/HTTP/1.1映射到文件」。 CI RewriteRule確實看起來有些不同,但即使將其更改爲您的版本,它仍然無效。好消息是,與此同時,我的一位同事也一直在試驗它 - 我們都試圖讓它發揮作用! - 現在已經成功地使用RewriteCond%{HTTP_HOST}^xyz \ .example \ .com $ [NC] RewriteRule ^(。*)$ http://example.com/xyz/$1 [P]工作,謝謝 – GSA 2010-09-03 09:14:01

+0

@GSA - 是的,那是因爲我沒有考慮到CodeIgnitor重寫後會發生什麼。爲了完整起見,我已經更新瞭解決方案的答案。您的同事使用'P'標誌的解決方案也很好;我剛剛避免暗示,因爲它具有創建全新請求作爲代理的一部分的開銷。無可否認,如果你的服務器沒有受到壓力,這是一個非問題。 – 2010-09-03 11:25:00

相關問題