在子域重写后强制使用尾部斜杠到URL

时间:2010-09-02 11:05:05

标签: php apache wordpress .htaccess mod-rewrite

我正在将子域重写为'文件夹' - 实际上是wordpress中的一个页面,这一切似乎都正常工作。我不希望URL栏中的地址发生变化。

除非用户没有在页面名称后面加上斜杠,否则一切正常,然后页面仍然会重定向到正确的URL,但地址栏中的URL会发生变化

例如:foo.example.com/bar 成为:public.example.com/foo/bar

其中:foo.example.com/bar/保留在地址栏中的正确网址,但显示重定向的网页(这是正确的)

如果未发送尾部斜杠,我需要添加什么规则才能添加?

我到目前为止的代码是:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

Options +FollowSymlinks

RewriteCond %{HTTP_HOST} ^foo\.example\.com$ [NC]
RewriteRule ^(.*)$ http://public.example.com/foo/$1 [P]

# rules for WordPress ...

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

#####

</IfModule>

任何帮助都会很棒,我对htaccess很新。谢谢!

2 个答案:

答案 0 :(得分:0)

这条规则应该这样做:

RewriteRule .*[^/]$ %{REQUEST_URI}/

将此规则放在其他规则之前。您还可能希望添加条件以排除现有文件:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .*[^/]$ %{REQUEST_URI}/

答案 1 :(得分:0)

Phew,经过一段时间的游戏,我似乎已经开始工作了:

RewriteCond %{HTTP_HOST} ^foo\.example\.com$ [NC]
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://foo.example.com/$1/ [L,R=301]

RewriteCond %{HTTP_HOST} ^foo\.example\.com$ [NC]
RewriteRule ^(.*)$ http://public.example.com/foo/$1 [P]

基本上,第一个块会在URL中添加一个尾随斜杠,因为它首先不存在,然后第二个块会对URL进行代理重定向。

据我所知,这可以捕获所有情况,但如果有任何漏洞,请告诉我!