【问题标题】:Forcing a trailing slash to a URL after a subdomain rewrite在子域重写后强制在 URL 后面加上斜杠
【发布时间】:2010-09-03 16:59:59
【问题描述】:

我正在将一个子域重写到一个“文件夹”——实际上是 wordpress 中的一个页面,这一切似乎都正常工作。我不希望 URL 栏中的地址更改。

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

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

哪里 : foo.example.com/bar/ 在地址栏中停留在正确的 URL 但显示重定向的页面(这是正确的)

如果没有发送,我需要添加什么规则来添加斜杠?

我目前的代码是:

<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 还是很陌生。谢谢!

【问题讨论】:

  • RewriteRule ^(.*)$ http://public.example.com/foo/$1 [L] 应该始终导致外部重定向,但您是说如果您在 URL 上包含尾部斜杠,它不会?
  • 嗨蒂姆!啊,我粘贴了错误的代码。它应该是 [P] 而不是 [L] - 正确的页面显示不带斜线,但它在地址栏中重定向。有了斜线,一切都完美了!

标签: php apache wordpress .htaccess mod-rewrite


【解决方案1】:

这条规则应该这样做:

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

将此规则放在其他规则之前。您可能还想添加一个条件来排除现有文件:

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

【讨论】:

  • 感谢 Gumbo,不幸的是,我在该行收到 500 服务器错误。在几个地方尝试过,没有任何乐趣:(。感谢您的帮助!
  • 错误日志显示:由于可能的配置错误,请求超出了 10 个内部重定向的限制。
【解决方案2】:

呸,玩了一会儿后,我似乎已经开始工作了:

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

据我所知,这涵盖了所有情况,但如果有任何漏洞,请告诉我!

【讨论】:

    猜你喜欢
    • 2012-12-26
    • 2019-02-04
    • 2016-11-21
    • 2016-04-30
    • 2014-07-23
    • 2012-03-25
    • 2012-05-20
    • 1970-01-01
    • 2018-03-18
    相关资源
    最近更新 更多