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

.htaccess 如何在htaccess文件中写入以同时强制尾部斜杠和www,.htaccess,.htaccess,我试图实现两条规则 1) 强迫www。 我通过做 RewriteCond %{HTTP_HOST} ^domain.com RewriteRule (.*) http://www.domain.com/$1 [R=301,L] 2) 在所有URL上添加尾部正斜杠 我是通过这样做才做到这一点的 RewriteCond %{HTTP_HOST} ^domain.com RewriteRule (.*) http://www.domain.com/$1/ [R=301,L] 然后我遇到了一个问题

我试图实现两条规则

1) 强迫www。
我通过做

RewriteCond %{HTTP_HOST} ^domain.com
RewriteRule (.*) http://www.domain.com/$1 [R=301,L]
2) 在所有URL上添加尾部正斜杠
我是通过这样做才做到这一点的

RewriteCond %{HTTP_HOST} ^domain.com
RewriteRule (.*) http://www.domain.com/$1/ [R=301,L]
然后我遇到了一个问题

类型url

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

如何编写它以使这两条规则生效?

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

此规则将重定向没有www的所有访问:

RewriteCond %{HTTP_HOST} ^domain.com
RewriteRule (.*) http://www.domain.com$1 [R=301]
请注意,我删除了该标志,使其成为最后一条规则

第二个放在后面的斜杠上:

RewriteRule (.*[^/])$ $1/ [R=301,L]
当URL已经以斜杠结尾时,它不会重定向。当有人访问一个没有www和斜杠的页面时,你将得到2个重定向。如果你只是因为搜索引擎而想这么做,那没关系。如果您自己的站点经常指向这样的URL,则需要另一个regexp


如果SEO是你的动机,也可以看看

我从来没有使用过这个指令,但是我想到了两个可能有用的想法:

  • 您的原始模式不排除已经以斜杠结尾的URL。我想你需要一个更像

    ^domain.com.*[^/]

  • 否则,URL将以斜杠传递结束,因此会添加另一个斜杠

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


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

    您好,谢谢大家的投入我放弃了这个想法,但我仍然从您的回复中受益。谢谢