我正面臨一個Apache配置問題,可以總結如下。使用RewriteRule尋找一個RewriteBase等效
- 在一個獨特的主持系統我有很多不同的考點,每一個在其自己的子目錄,所以他們通過像
myhostname.fr/sitename
的URL訪問。
因此在相應的.htaccess
,通常的做法是有 +RewriteRule
集之前RewriteBase /sitename
,它工作正常。 - 現在對於其中一個網站(比如在
specialsite
子目錄中),我必須創建一個專用域,以便url看起來像domainname.myhostname.fr
。
然後,對於本網站的工作,.htaccess
現在需要RewriteBase /
,而不是RewriteBase /specialsite
,它也能正常工作。 - 這裏的訣竅是:對Apache不太熟悉我決定嘗試並想也保持允許通過常見的URL
myhostname.fr/specialsite
訪問此網站。
因此,我必須找到一種方法來有條件地使用上述RewriteBase
之一,具體取決於當前的url。
我嘗試的第一個方法是這樣工作的:
<If "%(HTTP_HOST) =~ domainname\.myhostname\.fr">
RewriteBase/
</If>
<If "%(HTTP_HOST) =~ myhostname\.fr/specialsite">
RewriteBase /specialsite
</If>
但我得到一個HTTP 500錯誤,我花費很多時間去了解該<If>
僞指令例如Apache 2.4的,而我的託管只提供Apache 1.3!
左右(由於一些其他的SO答案)我鑫卡特以另一種方式,這是第一次做:
RewriteCond %{HTTP_HOST} domainname\.myhostname\.fr
RewriteRule^- [E=VirtualRewriteBase:/]
RewriteCond %{HTTP_HOST} myhostname\.fr/specialsite
RewriteRule^- [E=VirtualRewriteBase:/specialsite/]
然後在前面加上所有的進一步RewriteRule
替代與給定VirtualRewriteBase
,就像這樣:
RewriteRule^%{ENV:VirtualRewriteBase}index.php [L]
但是,雖然它對域訪問版本正常工作,它給我一個子目錄訪問版本的HTTP 404錯誤。
因此,爲了在如何應用我更換觀看改變了上述規則:
RewriteRule^%{ENV:VirtualRewriteBase}index.php [R,L]
而且我觀察到重定向的URL看起來像這樣:
http://myhostname.fr/kunden/homepages/7/d265580839/htdocs/specialsite/index.php
其中kunden/homepages/7/d265580839/htdocs/
是完整的文檔我的託管根。
您可以注意到文檔根目錄已經在原始網址的兩部分之間插入了。
此外,結果是完全一樣的,無論我在我的VirtualRewriteBase
!
所以這裏是我的主要問題:爲什麼會發生這種情況?
此外,我顯然對可能的替代解決方案感興趣,以實現雙重訪問可用性。
但最重要的,我想了解...
正如你所指出的,「_Indeed_,HTTP_HOST只包含.. 。http主機!「。但這只是問題:它並不適合我。在這種特殊情況下,我不清楚HTTP_HOST和REQUEST_URI之間的邊界在哪裏。所以現在變得清楚了......因此很簡單!我試過了,它工作正常。非常感謝你的幫助。 – cFreed
不客氣! –