使用 mod_rewrite 强制在 URL 中添加 www

使用 mod_rewrite 强制在 URL 中添加 www

我有一个托管网站,其中包含一个安全注册和购买部分,可用于访问付费内容。如果 URL 不是 www.domainname.com 格式,则 SSL 证书验证将失败。我考虑使用 mod_rewrite 规则在 URL 中未找到 www 时进行重定向。这有效,但重定向到安全页面失败并出现 500 错误。检查 ssl_error 日志后,我看到:

[Wed Jul 29 21:20:32 2009] [alert] [client xx.xx.xx.xx] /vservers/domainname/htdocs/.htaccess: RewriteEngine not allowed here, referer: http://www.domainname.com/index.php?option=com_content&view=category&id=2&Item=9

.htaccess 我们尝试过:

#  mod_rewrite in use
RewriteEngine On

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

我不确定这是否可以修复,或者我必须等待托管服务提供商解决这个问题。

答案1

正如所指出的,您只能在中央配置中使用 RewriteEngine,而不能在 .htaccess 中使用。由于错误不是因为它无法识别 RewriteEngine,因此您可以确定 mod_rewrite 已安装。您无法确定的是您的 vhost 是否已启用 RewriteEngine。最好的办法是尝试一下。

如果您托管的网站是动态的,您可以添加一些代码来检查 $SERVER_NAME 并进行适当的重定向,但如果您没有可以添加代码的地方,这可能会花费太多精力。

否则,我想说您只能等待您的提供商。

如果您可以修改中央配置,则可以轻松完成此操作,而无需安装任何附加模块,也无需使用 mod_rewrite。我发现人们花了很长时间尝试使用 mod_rewrite,而其实有更简单的方法可以做到。

<VirtualHost *:80>
   ServerName example.com
   Redirect / http://www.example.com
</VirtualHost>

<VirtualHost *:80>
   ServerName www.example.com
   .
   .
   .
</VirtualHost>

如果您需要重定向多个主机,您可以向顶部虚拟主机添加额外的“ServerAlias”行。

答案2

似乎您无法在那里使用 rewriteengine。如果您无法更改 apaChe 配置,您唯一可以尝试的是删除“RewriteEngine on”,并期望 mod_rewrite 在服务器范围内启用

如果你可以更改 apache 配置,请将 RewriteEngine 移到那里或添加“AllowOverride all”

相关内容