【发布时间】:2011-10-10 07:18:01
【问题描述】:
我一直在为 mod_rewrite 苦苦挣扎。我们有许多通过 WordPress 多站点运行的客户端门户,所有这些门户都通过一个子目录访问:portal。
例如:http://www.mydomain.com/portal/clientA/
我希望只需输入 http://www.mydomain.com/clientA/ 即可到达那里,它会将我重定向到 http://www.mydomain.com/portal/clientA/
这是我目前所拥有的,我可以说它并没有产生任何重写:
RewriteCond %{REQUEST_URI} /portal/
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule . - [S=1]
RewriteRule /clientA(/?) /portal/clientA/
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
第二部分我无法触及,因为 WordPress 需要它。我的模式还试图预测有人不输入斜杠,因此(/?)
编辑:我还应该注意,我不想创建更通用的规则 - 我很乐意为每个新客户添加重写规则并增加 S=x 数字每次。
编辑(8 月 11 日),所以经过一番推敲之后,这就是我的 .htaccess 所在的位置:
RewriteEngine On
RewriteRule ^clientA(/?) /portal/clientA/ [R]
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
不用说它不起作用。但是,如果我删除整个 WordPress 部分,则第一部分有效。我需要它们同时工作。导致第一部分失败的 WordPress 作品是什么?我想这是 RewriteBase 和最后一条规则的组合,它将其他任何东西都别名为 /index.php,坦率地说,这有点令人失望。事实上,我并不真正了解该规则如何在多站点环境中发挥作用,但似乎可以。
最终解决方案 感谢 LazyOne 的正确答案!供其他人参考,我使用的最终解决方案是:
RewriteEngine On
RewriteRule ^clientA(/.+)? /portal/clientA$1 [R,L]
RewriteRule ^clientB(/.+)? /portal/clientB$1 [R,L]
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
【问题讨论】:
标签: mod-rewrite