我正在运行启用了多站点的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指定的站点。
非常感谢帮助!
答案 0 :(得分:2)
规则集中的规则顺序是 重要的是因为重写引擎 处理它们(不是 总是明显的)订单,如下: 重写引擎循环通过 规则集(每个规则集组成 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将匹配任何域。