0

这是一个常见问题,对此有很多常见的答案,但我有一个不起作用的特定小细节,阅读文档并不能帮助我理解原因。

所以,问题来了:我想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,它不会URL 更改为http://swedish-cloud.com/index.html

但是,如果我键入一个不存在文件的路径,例如http://www.swedish-cloud.com/index2.html,它会将 URL 更改为http://swedish-cloud.com/index2.html显示404 Not Found错误。

你能让我明白我错过了什么吗?谢谢你。

PS:我没有对服务器的root访问权限。

4

2 回答 2

1

让我们给你正确的答案。您的 cond 语法错误但并不严重,并且规则的语法也错误。尝试:

RewriteCond %{HTTP_HOST} =www.swedish-cloud.com
RewriteRule ^.*          http://swedish-cloud.com/$0   [R=301,L]

如果您想要这样做,请在 cond 中使用相等运算符,然后您不需要转义匹配字符串。

替换字符串不需要引号或转义,既然你想要整个 URI,为什么不直接使用 $0 (整个匹配模式)。

于 2012-06-01T13:37:01.993 回答
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]
于 2012-06-01T02:39:50.537 回答