Linux
Nginx:將文件從目錄重寫到根目錄
我有在 linux 環境下執行的 nginx 伺服器,它正在處理域
www.example1.com
和www.example2.com
. 每個域都有自己的站點地圖,因此我需要為每個域載入正確的站點地圖,因為它位於根目錄中,例如:
www.example1.com/sitemap.xml
實際上是從www.example1.com/sitemaps/1/sitemap.xml
和:
www.example2.com/sitemap.xml
實際上是從www.example2.com/sitemaps/2/sitemap.xml
為了實現這一點,我嘗試為每個域分配一個值並根據變數值重寫它,如下所示:
在 nginx.conf 中:
map $http_host $domain { www.example1.com 1; www.example2.com 2; }
在 sitemap.conf 中:
if($domain=1){ rewrite sitemaps/1/sitemap(.*)$ /sitemap last; } if($domain=2){ rewrite sitemaps/2/sitemap(.*)$ /sitemap last; }
但由於某種原因,此配置返回 404。
有什麼建議嗎?
我沒有看到您的完整配置,也不知道您如何以及在何處包含該
sitemap.conf
文件,但我寧願以完全不同的方式進行。使用您現有的map
塊,它看起來像location = /sitemap.xml { # use '$domain' variable as a part of the full path to 'sitemap.xml' file root /var/www/domain/sitemaps/$domain; # no trailing slash here! }
甚至使用以下指令獲取
/sitemaps/N/
文件夾的完整路徑map
map $http_host $sitemap_path { www.example1.com /var/www/example1.com/sitemaps/1; www.example2.com /var/www/example1.com/sitemaps/2; }
和
location = /sitemap.xml { # use '$sitemap_path' variable as the full path to 'sitemap.xml' file root $sitemap_path; # no trailing slash here! }
如果您仍想
rewrite
對該任務使用該指令,則說明您使用不正確。你可以試試這個:if ($domain=1) { rewrite ^/sitemap\.xml$ /sitemaps/1/sitemap.xml last; } if ($domain=2) { rewrite ^/sitemap\.xml$ /sitemaps/2/sitemap.xml last; }
甚至更優化:
if ($domain) { rewrite ^/sitemap\.xml$ /sitemaps/$domain/sitemap.xml last; }