2010-09-02 88 views
0

我正在将一个子域重新写入一个'文件夹' - 实际上是wordpress中的一个页面,并且这一切似乎都正常工作。我不希望URL栏中的地址改变。 foo.example:除非用户并没有把尾部斜杠的页面名称后,页面仍然重定向到正确的URL,但在地址栏中的URL改变在子域重写后强制一个URL后面的斜杠

例如

,一切工作正常。 COM /条 变为: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的。谢谢!

+0

'RewriteRule ^(。*)$ http://public.example.com/foo/$1 [L]'应该总是会引起外部重定向,但是你说如果你在URL中包含一个尾部的斜线,它不? – 2010-09-02 14:25:28

+0

你好!啊,我粘贴了错误的代码。它的意思是[P]而不是[L] - 正确的页面没有斜线显示,但它在地址栏中重定向。随着斜线一切都是完美的! – 2010-09-02 16:03:55

回答

0

唷,一点玩耍后,我似乎已经得到它的工作:

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做代理重定向。

据我所见,这可以捕获所有情况,但是让我知道是否有任何漏洞!

0

这个规则应该这样做:

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

将这个规则在你的其他规则前面。您可能还需要添加一个条件,以排除存在的文件:

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

非常感谢Gumbo,不幸的是我得到了一条500线的服务器错误。尝试它在几个地方,并没有喜悦:(。谢谢你的帮助,虽然! – 2010-09-03 08:06:30

+0

@安迪智能:和错误日志文件说什么? – Gumbo 2010-09-03 08:12:00

+0

错误日志说:请求超过了10个内部重定向的限制,由于可能的配置错误。 – 2010-09-03 08:15:02