[英].htaccess help: RewriteRule entire website
我最近在其生產環境中啟動了一個網站。
整個網站將位於以下文件夾結構中:/root/v1/website.com/index.php
我需要的幫助是.htaccess。 在升級環境時,我需要零停機時間,因此我想在名為/root/v2/website.com/index.php的文件夾中制作網站的下一個版本,並可以立即進行切換。
通過將所有流量發送到當前版本中的相應文件夾,基本上是“翻轉開關”。
因此,例如,現在,我希望來自http://www.website.com/cookies/aregreat.php的所有流量都可以在以下位置打開:/root/v1/website.com/cookies/aregreat.php
這也將適用於圖像,js和css文件
然后,我顯然可以從.htaccess內部更改版本,其余的將自行解決。
我對RewriteRule不太熟悉,對正則表達式也不太滿意,我最需要解決的問題是:
RewriteEngine on
RewriteRule (.*) /../v1.0.0/$1
這可能是完全錯誤的。 這有可能嗎?
歡迎所有幫助。
非常感謝,
擔
如果您真的希望“所有流量”都使用新版本,那么我不會使用.htacess文件,而是使用符號鏈接。 在根目錄下,您將有一個“發布”的鏈接指向v1。 像這樣創建它
ln -s /root/v1 /root/released
將您的虛擬主機指向已釋放。 要切換時,請執行以下一行命令:
rm -rf /root/released; ln -s /root/v2 root/released
如何在apache虛擬主機配置( DocumentRoot )中進行配置?
如果您需要在.htaccess中執行此操作,請嘗試以下操作:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^domainname.com$ [NC,OR]
RewriteCond %{HTTP_HOST} ^www.domainname.com$
RewriteCond %{REQUEST_URI} !folderV2/
RewriteRule (.*) /folderV2/$1 [L]
注意:我還沒有測試過,我不確定100%是否可以使用。
在文檔根目錄下的htaccess文件中(將為n /root/.htaccess
):
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/v[0-9.]+/website.com
RewriteRule ^(.*)$ /v1/website.com/$1 [L]
您只需要將v1
更改為您擁有的任何版本,然后保存文件,即可完成切換。
不幸的是,這行不通,但這是我想要的解決方案類型。 是否可以重寫它以使其在子域上工作?
是的,您可以使用%
符號與%{HTTP_HOST}
和向后引用進行匹配:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)$ [NC]
RewriteCond %{REQUEST_URI} !^/v[0-9.]+/%2
RewriteRule ^(.*)$ /v1/%2/$1 [L]
在這里, %2
將是可選www.
之后的任何匹配項www.
。 因此,如果URL為:
http://www.domain.com/cookies/aregreat.php
然后,您應該將其重寫為/v1/domain.com/cookies/aregreat.php
,並且:
http://cakes.domain.com/chocolate/cake.php
應該重寫為/v1/cakes.domain.com/chocolate/cake.php
等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.