如何在htaccess文件中写入同时强制尾随斜杠和www

时间:2011-08-22 14:29:11

标签: .htaccess

我试图实施2条规则

1)强迫www。
我的工作是

RewriteCond %{HTTP_HOST} ^domain.com
RewriteRule (.*) http://www.domain.com/$1 [R=301,L]

2)在所有网址上添加尾随正斜杠 我通过这样做得到了这个目标

RewriteCond %{HTTP_HOST} ^domain.com
RewriteRule (.*) http://www.domain.com/$1/ [R=301,L]

然后我遇到了一个问题,

输入网址

1) www.domain.com --rewrites to--> http://www.domain.com/  ---Desired Result

2) domain.com --rewrites to--> http://www.domain.com//  ---Undesired Result

3) domain.com/location1 --rewrites to--> http://www.domain.com/location1/  ---Desired Result

4) www.domain.com/location1 --rewrites to--> http://www.domain.com/location1  ---Undesired Result

我如何编写它以便让这两条规则有效?

3 个答案:

答案 0 :(得分:1)

此规则将重定向所有访问而不使用www:

RewriteCond %{HTTP_HOST} ^domain.com
RewriteRule (.*) http://www.domain.com$1 [R=301]

看到我删除了标志,使其成为最后一条规则。

和第二个放置斜杠:

RewriteRule (.*[^/])$ $1/ [R=301,L]

当URL已经以斜线结尾时,它不会重定向。当有人访问没有www且没有斜线的页面时,您将获得2次重定向。如果你只是想通过搜索引擎这样做,那很好。如果您自己的网站经常指向这样的网址,则需要另一个正则表达式。

如果SEO是您的动机,请查看canonical URLs

答案 1 :(得分:0)

尝试在www部分之前添加斜杠部分 - 应该可以正常工作。

答案 2 :(得分:0)

我从未使用过这个指令,但有两种想法可能会有所帮助:

  1. 您的原始模式不会排除已经以斜杠结尾的网址。我认为你需要一个更像

    的模式

    ^ domain.com。* [^ /]

  2. 否则以斜杠结尾的网址会传递,因此会添加另一个斜杠。

    1. 无论如何,你为什么这样做?
    2. 为什么要更改主机名以添加“www”?如果请求进入您的服务器,那么有或没有www,它就成功了,那你为什么要关心?如果请求没有发送到您的服务器,那么当然,您的规则永远不会被应用。我在想,也许你的例子过于简单,也许在现实生活中你会重定向到另一台服务器。但在那种情况下,你为什么要关心原来的主机名呢?只需填写您需要的主机名。

      为什么要添加斜杠?如果名称原来是一个目录,Apache服务器会自动添加斜杠。您不能拥有同名文件和目录,因此最多只会更改not-founds上的错误消息。