2011-12-14 170 views
0

場景:我將多個域指向同一IP /機器,並提供依賴於請求/原始域的內容。我沒有使用基於名稱的v主機,因爲我需要保持代碼庫合併,以及其他各種原因。我還需要爲這些網站生成站點地圖,並分別進行維護。我的困境是,我試圖使用htaccess將所有* sitemap.xml和* site_index.xml請求重定向到包含請求域名的子文件夾,例如:htaccess和多個域

http://somedomain.com/sitemap.xml需要指向

http://someotherdomain.com/sitemap.xml /var/www/html/sites/somedomain.com/sitemap.xml的本地目錄需要檢索/var/www/html/sites/someotherdomain.com/sitemap.xml

這也必須在不改變地址欄內的地址或重定向搜索機器人等情況下發生。

I'v e看着將所有* sitemap.xml請求指向一個腳本來檢索和提供所需的數據,但這看起來很麻煩,而且不像htaccess指令那麼優雅。至此我已產生:

的RewriteCond $ 1 =站點 重寫規則^([^ /] +)/ sitemap.xml的$站點/%{HTTP_HOST} /sitemap.xml [L]

其並不導致錯誤,也不會導致預期的效果。有什麼建議麼?

更新:我能夠使用Jacek提供的指令,並稍微改變它們以實現我之後的操作。這是我結束了:

RewriteRule ^sitemap.xml$ sites/%{HTTP_HOST}/sitemap.xml [L]

+1

上http://webmasters.stackexchange.com – 2011-12-14 22:34:01

+0

感謝克里斯富裕了,貼在那裏。 – Jackson 2011-12-14 22:55:18

回答

0

應該大致工作:

RewriteCond %{HTTP_HOST} !^(.*)$ [NC] 
RewriteRule ^sitemap.xml$ %1/sitemap.xml [L] 

其中的.htaccess在主文件夾,並在someotherdomain.com是子

$ 1,等等。是來自RewriteRule和%1類型的正則表達式捕獲來自RewriteCond

1

下面是一個更通用的答案來處理多個網站一次:使用mapfile

首先,我建議將文件夾命名爲與所有「合作伙伴」或「網站」一樣沒有擴展名。

創建一個mapfile,你把所有的「合作伙伴」或「網站」不帶擴展名:

RewriteMap mappartners \ 
    dbm:/web/htdocs/one_for_all/rewriterules/partners.map 

在映射文件中創建這樣簡單的條目:

somedomain   one_for_all/somedomain 
someotherdomain  one_for_all/someotherdomain 
someotherotherdomain one_for_all/someotherotherdomain 
... 

你在這兒簽了硬部分:

# Make a RewriteCond that fills "%1" with the name of the partner... 
RewriteCond %{HTTP_HOST} ^(www\.)?([a-zA-Z0-9\-]+)\.+(fr|com|net|org|eu)$ 
# ...make a RewriteRule that does nothing but initialize "partner" variable: 
RewriteRule (.*) - [QSA,E=PARTNER:${mappartners:%2|notfound}] 
# If empty or "notfound" 
RewriteCond %{ENV:PARTNER} ^$ [OR] 
RewriteCond %{ENV:PARTNER} notfound 
# "not found" 404 : 
RewriteRule . - [R=404,L] 

這樣一切都是動態的,但它有點m礦石複合體。

...並與目的地的全部重寫完成:

RewriteCond %{DOCUMENT_ROOT}/%{ENV:PARTNER}/%{REQUEST_FILENAME} -f 
# File exists => rewrite filename and end rewriterule: 
RewriteRule ^(.+) %{DOCUMENT_ROOT}/%{ENV:PARTNER}/%{REQUEST_FILENAME} [QSA,L] 

- 作爲一個說明,我有一幫一的RewriteRules這樣,我的第三個框架(你將在幾天在我未來的網站上看到天(http://papdevis.fr))是最快的之一。

奧利維爾