Wordpress多站点重写规则

时间:2011-05-31 22:39:58

标签: wordpress mod-rewrite

我正在运行启用了多站点的Wordpress 3.1。我有多个网站都在web根目录中共享相同的.htaccess文件。我使用RewriteCond定位特定网站并将RewriteRules应用于每个站点。不幸的是,它没有按预期工作。这是我在.htaccess文件中的内容:

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指定的站点。

非常感谢帮助!

1 个答案:

答案 0 :(得分: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仅对紧随其后的第一个rewriteRule有效,而不是对于它下面的所有规则。所以第二个rewriteRule将匹配任何域。