如何在 .htaccess 中完成我的 URL 标头

如何在 .htaccess 中完成我的 URL 标头

我有一个在 Apache 上运行的网站www.example.com

example.com也许有人通过、或者www.example.comhttp://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.comhttp://example.com或者甚至联系到我http://www.example.com

注意:example.comhttp://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

参考:

相关内容