2011-05-31 118 views
1

我正在运行多站点启用Wordpress 3.1。我有多个网站都在Web根目录中共享相同的.htaccess文件。我使用RewriteCond来定位特定的网站,并将RewriteRules应用到每个网站。不幸的是,它不能按预期工作。以下是我在我的.htaccess文件:Wordpress多站点重写规则

RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 

# Blog1 Rewrite Rules which should only apply to blog1.mydomain.com 
RewriteCond %{HTTP_HOST} ^blog1\.mydomain\.com [nc] 
RewriteRule ^fileabc\.jpg$ http://blog1.mydomain.com/files/2011/05/fileabc.jpg [R=301,NC,L] 
RewriteRule ^filexyz\.pdf$ http://blog1.mydomain.com/wp-content/themes/blog1Theme/Files/filexyz.pdf [R=301,NC,L] 

# Blog2 Rewrite Riles which should only apply to blog2.com 
RewriteCond %{HTTP_HOST} ^Blog2\.com [nc] 
RewriteRule ^index\.html$ http://Blog2.com/index.php [R=301,NC,L] 
RewriteRule ^page\.html$ http://Blog2.com/page/ [R=301,NC,L] 

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule^- [L] 
RewriteRule . index.php [L] 

我用的RewriteCond来针对特定网站(blog1.mydomain.com或blog2.com),他们对每一个具体的RewriteRules。

但是,ReWriteRules正在应用于这两个网站(blog1.mydomain.com和blog2.com)。

例如:

访问blog1.mydomain.com/fileabc.jpg应该重定向到http://blog1.mydomain.com/files/2011/05/fileabc.jpg

然而,访问Blog2.com/fileabc.jpg也重定向到http://blog1.mydomain.com/files/2011/05/fileabc.jpg

所以的RewriteRules正在应用于(全部)网站,而不仅仅是由RewriteCond指定的网站。

非常感谢帮助!

回答

2

Apache page

的规则,在规则集的顺序是 重要,因为 处理它们在特定的(不 总是显而易见的)命令,如下重写引擎: 重写引擎遍历 规则集(每个规则集由RewriteRule指令构成 ,或者不包含RewriteConds的 ),按规则进行规则。 当一个特定的规则匹配时, mod_rewrite也检查 相应的条件(RewriteCond 指令)。由于历史原因 的条件首先给出,使得 的控制流程有点 冗长。

首先将URL与规则的 模式进行匹配。如果它不匹配 ,则mod_rewrite立即停止处理该规则的 ,并继续执行 下一条规则。如果模式匹配, mod_rewrite检查规则 条件。如果不存在,则 URL将替换为新的 字符串,该字符串由 替换字符串构成,mod_rewrite 继续执行下一个规则。现在

您的规则

RewriteCond %{HTTP_HOST} ^blog1\.mydomain\.com [nc] 
RewriteRule ^fileabc\.jpg$ http://blog1.mydomain.com/files/2011/05/fileabc.jpg [R=301,NC,L] 
RewriteRule ^filexyz\.pdf$ http://blog1.mydomain.com/wp-content/themes/blog1Theme/Files/filexyz.pdf [R=301,NC,L] 

的RewriteCond只对第一个重写规则紧随其后,而不是低于it.So第二重写规则将匹配任何域中的所有规则有效。

+0

“RewriteCond仅适用于紧随其后的第一个rewriteRule,不适用于它下面的所有规则。因此,第二个rewriteRule将匹配任何域。” 非常有趣。感谢您的信息和Apache链接。那么有没有办法让一个RewriteCond适用于多个RewriteRule?或者说,就是重复的RewriteCond的正确方法: 的RewriteCond 重写规则 的RewriteCond 的RewriteCond 重写规则 的RewriteCond 重写规则 – user663561 2011-06-08 19:22:37

+0

技术上它不是可能的,但也有变通http://www.webmasterworld.com/forum92/1854。 htm,如果你喜欢答案,随时可以upvote :) – 2011-06-08 20:02:31

+0

“RewriteCond仅适用于紧随其后的第一个rewriteRule,不适用于它下面的所有规则。” - 谢谢,我收到了其他信息。感谢您的更正。 – user663561 2011-07-11 19:55:03