我一直在努力与mod_rewrite。我们有许多通过WordPress多站点运行的客户端门户,所有这些客户端门户都可以通过子目录访问:portal
。mod_rewrite混淆子目录
因此,例如: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
号码。
EDIT(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别名的最后一个规则的组合,这坦率地说是一个无趣的故事。事实上,我并没有真正理解这个规则如何能够在多站点环境下工作,但似乎是这样。
FINAL SOLUTION 感谢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
感谢您的建议。唯一的问题是,使用[L] ast指令,WordPress重写将不会发生,它们需要发生(即使是客户端文件夹),以便在WP中启用漂亮的固定链接 –
@Tom为什么“不会发生” ?看到'[L]'标志重写进入下一次迭代(即它的工作原理--L'并不意味着“停止重写并立即离开”),并且仍然会达到WordPress重写规则。但是,是的 - 您可以通过删除“L”标志来加速它*微小的一点。其余的由WordPress处理'/ portal/clientA/something'链接。 **关于[L]标志**:http://stackoverflow.com/questions/6797998/rewriterule-last-l-flag-not-working。如果你在服务器配置中有你的重写规则,那么最好跳过[L]标志。 – LazyOne
啊!感谢您澄清[L]。我确实认为它在那之后立即停止处理.htaccess。现在,如果你看看我更新的帖子,你可以看到它仍然无法正常工作。是否因为RewriteBase? –