2011-12-14 48 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))是最快的之一。

奥利维尔