【问题标题】:HTACCESS setting HTTPS as default, so redirect to / will skip the first HTTP redirectHTACCESS 将 HTTPS 设置为默认,因此重定向到 / 将跳过第一个 HTTP 重定向
【发布时间】:2017-08-29 08:14:37
【问题描述】:

我有一个简单的 htaccess 重定向规则:

RewriteRule ^directory$     /   [R=301,L]

目前执行以下重定向结构:
https://mywebsite.com/directory -> http://mywebsite.com-> https://mywebsite.com (注意 HTTPS 与 HTTP)。

第二次重定向是由于设置了处理 HTTP->HTTPS 重定向的规则:

RewriteCond %{HTTP_HOST} !mywebsite.com$ [NC]
RewriteRule ^(.*)$ https://mywebsite.com/$1 [L,R=301]  

RewriteCond %{REQUEST_URI} !\.(jpg|png|gif|bmp)$ [nc]
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^(.*)$ https://%{SERVER_NAME}/$1 [R=301,L]

但我想避免这种双重步骤。如何将 HTTPS 设置为 htaccess 的默认设置?

【问题讨论】:

  • 没有“htaccess 的默认值”之类的东西。向我们展示您的完整规则集。
  • @CBroe 添加了 HTTPS 重定向。你是这个意思吗?
  • @CBroe 当我在 htaccess 中指定重定向到“/”时,他应该如何知道这是 https 还是 http?
  • 任何您未明确指定或覆盖的内容均基于原始请求。因此,如果您所做的只是重写到 /,那么如果原始请求是通过 HTTP 发出的,那么这将意味着重定向到 http://example.com/,或者如果是 HTTPS,则重定向到 https://example.com/ ...

标签: php apache .htaccess redirect mod-rewrite


【解决方案1】:

如何将 HTTPS 设置为 htaccess 的默认设置?

只需在重定向中使用https:// URL:

RewriteRule ^directory/?$ https://%{HTTP_HOST}/ [R=301,L,NE,NC]

【讨论】:

  • HTTP_HOST变量代表当前请求URL中的域名。
  • 所以基本上,对于 htaccess,默认始终是 http,如果我想要不同,我需要在每个 url 重定向规则中指定?
  • 默认(与您的第一个重定向规则一样)是重定向到当前方案。所以如果http:// 停留在http://https:// 停留在https://
  • 但正如我所展示的,https://mywebsite.com/directory 被重定向到 http://mywebsite.com 并且不保留当前架构,只是为了稍后再次重定向
  • 那么Apache的虚拟主机文件可以设置吗?我进去看看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多