我有一个在 Apache 上运行的网站www.example.com
。
example.com
也许有人通过、或者www.example.com
、http://example.com
或者甚至联系到我http://www.example.com
。
我是否可以使用重写规则,以便.htaccess
无论如何访问example.com
,URL 都能完全充实http://www.example.com
?
答案1
假设 Apache 已经接受对 www 子域和域顶点(即)的请求,那么您可以在文档根目录中的文件example.com
顶部附近使用 mod_rewrite 将主机名规范化为 www 。.htaccess
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
上述代码将所有格式为 的请求重定向example.com/<anything>
到http://www.example.com/<anything>
。REQUEST_URI
服务器变量包含完整的 URL 路径,包括斜杠前缀。原始请求中可能存在的任何查询字符串都将原封不动地传递。
首先使用 302(临时)重定向进行测试,以避免潜在的缓存问题。
example.com
也许有人通过、或者www.example.com
、http://example.com
或者甚至联系到我http://www.example.com
。
注意:example.com
和http://example.com
是一样的 - 浏览器只是隐藏了协议(并且默认为 HTTP最多www.example.com
用户)。和 也一样http://www.example.com
。
更新:
当我刚刚尝试这个时,浏览器 URL 仍然
example.com
如果您还没有这样做,您需要.htaccess
在服务器配置中启用覆盖,否则该.htaccess
文件将被忽略。
在相应的<Directory>
容器内<VirtualHost>
(或主服务器配置)你需要设置AllowOverride
(默认为“无”)。例如:
<Directory /path/to/document-root>
Options +FollowSymLinks
Require all granted
# Enable .htaccess overrides
AllowOverride All
</Directory>
而且,如果你还没有启用 mod_rewrite,你需要启用它:
调试.htaccess
您可以LogLevel
在服务器配置中增加(Apache 2.4+)以将调试信息输出到服务器的错误日志。例如,在相应的 <VirtualHost>
容器(或主服务器配置)中:
LogLevel debug
这将为所有模块设置“日志级别”。默认值为LogLevel warn
。如果只针对特定模块,例如 mod_rewrite(上面使用),则可以仅指定该模块。例如LogLevel rewrite:debug
。
参考: