这是一个常见的问题,并且有许多常见的答案,但我有一个特定的小细节不起作用,阅读文档并没有帮助我理解原因。
所以,问题是:我想从域名中删除www.
。我将.htaccess
与mod_rewrite一起使用。这是代码:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.swedish\-cloud\.com$
RewriteRule ^(.*)$ "http\:\/\/swedish\-cloud\.com\/$1" [R=301,L]
如果我只输入http://www.swedish-cloud.com
,它就可以了。它将其更改为http://swedish-cloud.com
。
但是,如果我输入,例如:http://www.swedish-cloud.com/index.html
,则不将网址更改为http://swedish-cloud.com/index.html
但是,如果我键入指向不存在文件的路径,例如http://www.swedish-cloud.com/index2.html
,则会将网址更改为http://swedish-cloud.com/index2.html
,显示 404 Not Found 错误。
PS:我没有对服务器的root访问权限。
答案 0 :(得分:1)
让我们给你正确的答案。您的cond语法错误但不显着,规则的语法也是错误的。尝试:
RewriteCond %{HTTP_HOST} =www.swedish-cloud.com
RewriteRule ^.* http://swedish-cloud.com/$0 [R=301,L]
如果您想要这样做,请在cond中使用相等运算符,然后您不需要转义匹配字符串。
替换字符串不需要引号或转义,因为您需要整个URI,为什么不使用$ 0(整个匹配模式)。
答案 1 :(得分:0)
您看到的404错误是标准错误。 重写的原因不适用于www.example.com/something.html是因为它与正则表达式不匹配,因为你拥有行尾锚。 swedish-cloud.com $之后的$。这意味着www.swedish-cloud.com将被重写后,因为你基本上已经终止了正则表达式。
尝试:
RewriteCond %{HTTP_HOST} ^www.example\.com
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]