【问题标题】:htaccess - How to force http and non-wwwhtaccess - 如何强制 http 和非 www
【发布时间】:2017-12-20 09:30:16
【问题描述】:

我需要设置一个 htaccess 域配置,其中 https 重定向到 http,所有 www 请求都重定向到非 www。我想我可以用下面的代码解决它,但它不能正常工作。它只会将http://www.example.com 重定向到http://example.com。 https请求最终在例如https://example.com 提示连接不安全。

<IfModule mod_rewrite.c>

RewriteEngine On 
RewriteBase /

# Redirect HTTPS to HTTP
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# Force non-www
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [L,R=301]

</IfModule>

【问题讨论】:

  • 您是否在本地运行 Apache,在同一台机器上运行访问 example.com 的用户代理? RewriteCond %{HTTPS} on 部分可能不适用于所有网络。例如,一些反向代理需要 RewriteCond %{HTTP:X-Forwarded-SSL}。
  • 我不在本地运行 Apache。它是具有 cPanel 但没有 ssh 访问权限的共享主机。我在 PHP 中检查了 %{HTTPS},它显示 https 在请求 example.com 时处于活动状态。 example.com 就是一个例子。真实域名隐藏在这里。

标签: apache .htaccess redirect mod-rewrite


【解决方案1】:

很可能,您的共享主机代理了到您网站的所有 HTTP 连接,并通过 HTTPS 转发它们。您永远不会看到来自客户端的连接,只会看到来自共享主机代理的连接。询问共享主机她是否会或将在 HTTP 标头(如 Forwarded-SSL(或 X-Forwarded-SSL))中发出您需要的信息。

【讨论】:

  • 我会询问信息并告诉它是否解决了问题。
  • ISP 告诉我以下内容:“您的 webspace 包上没有 https。您需要 SSL 才能使用端口 443。”
  • 但是您的 ISP 允许客户端连接到 HTTPS://example.com,尽管证书不正确?我认为您需要从您的 ISP 获得技术或销售支持,或者只是切换供应商。我推荐 PageKite,因为这样您就可以在自己的计算机上,在自己的房子里托管网站。
【解决方案2】:

这对我有用。

RewriteCond %{SERVER_PORT} ^443$
RewriteRule ^(.*)$ http://example.com:80/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www\.
RewriteRule ^(.*)$ http://example.com:80/$1 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-17
    • 2011-09-14
    • 2015-05-10
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多