簡體   English   中英

.htaccess將根重定向到子域

[英].htaccess Redirect Root to Subdomain

我正在嘗試使用當前的共享主機配置來解決一些煩惱,但是我在設置所需的設置時遇到了一些問題。

當前,我具有以下文件夾結構:

/
/.htaccess
  /example
  /example1
  /example2
  /example3

在共享主機上,主域自動設置為指向根目錄。 為了將主域指向子域,我在根文件的.htaccess中添加了以下內容:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L]

RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$
RewriteCond %{REQUEST_URI} !^/example/
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /example/$1
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(/)?$ example/ [L]

這樣可以正確地重寫URL,以便轉到example.com可以顯示/ example /子目錄中的內容。 問題在於根目錄的子目錄不會以相同的方式重寫,這不是我希望實現的功能。 例:

http://www.example.com/            = /example
http://www.example.com/example/    = /example
http://www.example.com/example1/   = /example1
http://www.example.com/example2/   = /example2
http://www.example.com/example3/   = /example3

我想發生的事情如下:

http://www.example.com/            = /example
http://www.example.com/example/    = /example/example
http://www.example.com/example1/   = /example/example1
http://www.example.com/example2/   = /example/example2
http://www.example.com/example3/   = /example/example3

我對應該發生的情況的理解如下:

  1. 收到http://www.example.com的請求。
  2. 第一個條件不匹配,HTTP_HOST不匹配^ example.com $
  3. 第二個條件:匹配^ www.example.com
  4. 第三個條件:沒有REQUEST_URI,因此它不匹配^ / example /
  5. 第四點和第五點:我嘗試過使用和不使用這些方法,但是它似乎並沒有改變結果。 我的理解是,如果不注釋這些行,那么我現在會看到不需要的行(如果文件名和目錄存在,則不會進行重寫)。
  6. 將請求重寫到example.com/example/
  7. 第六個條件:將URL匹配到特定域。
  8. 始終重寫此URL,以使用/ example /子目錄。

這看起來確實可行,但是如果我嘗試訪問http://www.example.com/example2/ ,就會遇到問題。 由於REQUEST_URI與/ example /不匹配,我以為應該將其重寫為/ example / example2,但是顯然不會發生。

我沒有訪問Apache配置的權限,也沒有設置VirtualHosts的能力,所以我希望可以使用.htaccess規則進行某些操作。 對我如何使此簡單任務過於復雜的任何見解都將非常有幫助。

據我所知,如果根目錄中的目錄與傳入的請求匹配(即,如果exam​​ple1存在於根目錄中,則將RewriteCond重寫為/ example1到),則將忽略根目錄中的.htaccess文件。錯誤頁面從未被觸發)。

我對此的解決方案最終沒有我期望的那么優雅,但似乎可行。 希望它可以幫助偶然發現此問題的其他任何人。

在example1,example2和example3目錄中,我修改了.htaccess文件以包括以下內容(根據目錄更改example1):

RewriteCond %{HTTP_HOST} ^(www\.)example\.com$ [NC]
RewriteRule ^(.*)$ /example/example1/$1 [L]

這將強制主域提供我為其創建的子目錄中的內容,即使根目錄中存在匹配的目錄也是如此。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM