簡體   English   中英

.htaccess幫助:RewriteRule整個網站

[英].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.

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