2013-04-04 108 views
0

問題htaccess的 - 從子域根重定向到子域的文件夾(mod_rewrite的/ mod_proxy的)

我試圖從一個子域,例如根文件夾重定向sub.example.com)分配給子域的子目錄並將子域保持在地址欄中,例如, sub.example.com/subdir1

這不是我第一次使用mod_rewrite,但我不是專家。我以前沒有使用過mod_proxy,但我相信這將是這項任務所必需的。


背景

這是我工作的一個項目,其中主網絡是私人的一部分,但服務器不能修改。我需要使用他們的工具指定所有子域,而不是創建自己的重寫。這個問題涉及一個被用作開發網站的子域,它最終將在沒有子域的情況下生效。當它開始運行時,sub.example.com將變爲sub.com。我無法簡單地將子域的根文件夾設置爲我重定向到的目錄的原因是,該項目的代碼庫很大程度上依賴於內部鏈接管理的DOCUMENT_ROOT,而目標文件夾sub.example.com/subdir1不是根的網站。


我做了什麼

我會說,我已經超過了我指定的時間在這個問題上的工作,主要是出於興趣開始。

我已經做了大量的研究,並試圖從我看過的來源中提取零碎。但是,我所查看的所有資源中除one之外的所有資源都只有從子域重定向到網站根目錄的子目錄的信息。 sub.example.com - >example.com/root-subdir。實際上,上述頁面確實有與我的問題有關的信息的唯一原因是因爲提問的用戶意外地做了我目前正在嘗試做的事情。不幸的是,他所做的仍然不適合我。下面是我想現在(但給了我一個「310 - 重定向過多」的錯誤):

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^sub\.example\.com 
RewriteRule^/subdir1/ [R=301,L] 

如前所述,我認爲我可能需要使用mod_proxy這一點,但我有不知道會是什麼樣子。


任何幫助,你可以給予非常感謝。感謝您的幫助! :)

+2

在規則之前添加此'RewriteCond%{REQUEST_URI}!/ subdir1 [NC]'以防止出現循環。 – 2013-04-04 18:38:58

回答

-1

由@faa評論中給出的解決方案沒有完全解決我的問題,因爲我真正的錯誤忘記了匹配子域的根目錄和根目錄。 @faa確實,但是讓我回到正確的軌道上,並回答了我關於防止循環的問題。我使用他的代碼片段獲得的信息讓我意識到我需要什麼,我在解決方案中發現了this ServerFault問題。

我的最終解決方案是:

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^sub\.example\.com [NC] 
RewriteCond %{REQUEST_URI} ^/$ 
RewriteRule ^(.*)$ /subdir1/ [R=301,L] 


謝謝大家的幫助!

2

現在,如果你想重定向只是sub.example.comsub.example.com/subdir1,那麼試試這個:

RewriteCond %{HTTP_HOST} ^sub.example.com 
RewriteRule ^/?$ /subdir1 [R=301] 
+0

這是我已經嘗試的解決方案 - 不幸的是,我需要在服務器的工具中指定子域,以防止我爲該重定向更新'RewriteRule',並且此解決方案無限追加'/ root-of-sub/subdir1'到我的URL的末尾。如果這實際上是解決方案,那麼如果所請求的URL已被重新寫入'sub.example.com/subdir1',我將需要一個規則來防止重定向。不幸的是,我沒有嘗試過的任何條件。 – 2013-04-04 17:55:39

+0

什麼?您能否列出已經重寫到'sub.example.com/subdir1'中的所有網址以及您想要重寫的動態網址以及要複製的網址? – 5ervant 2013-04-04 18:20:37

+0

目前只有一個URL被重定向:'example.com/root-of-sub' - >'sub.example.com'(這是我無法控制的重定向)。現在我想添加以下重定向:'sub.example.com' - >'sub.example.com/subdir1'。 – 2013-04-04 18:26:59