.htaccess 在一个重定向中重定向到HTTPS和WWW

r1zhe5dt  于 2023-03-23  发布在  其他
关注(0)|答案(2)|浏览(162)

对于我的网站,我已经设置了CloudFlare CDN。网站托管在Siteground上。CloudFlare要求网站重定向到www.
现在我在htaccess文件中设置了重定向。它将所有非https和非www请求重定向到https-www版本。
以下是我在htaccess文件上使用的规则:

RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\. [OR]
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [NE,L,R=301]

重定向工作正常。**我这里唯一的问题是它需要2个重定向。**假设我的网站是example.com。
当我打开www.example.com时example.com,它首先重定向到https://example.com,然后重定向到https://www.example.com
所以,我在两次重定向后得到了响应代码。301-301 -200

**现在我的问题是:**有没有办法在一个单一的重定向完成?

bweufnob

bweufnob1#

你需要一个动态主机名吗?如果不需要(听起来像),你可以简化它:如果不是www或不是https,则重定向到https/www。如果主机名是静态的,则不需要从条件中获取它。您可以在重定向规则中按字面意思命名它:

RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\. [OR]
RewriteCond %{HTTPS} off
RewriteRule ^ https://www.example.com{REQUEST_URI} [QSA,R=301,END]

一开始使用302临时重定向是个好主意,只有在确定一切都正确设置后,才将其更改为301永久重定向。这可以防止在尝试时出现缓存问题...
如果您收到内部服务器错误(http状态500)使用上面的规则,那么很有可能你操作的是一个非常旧的版本的apache http服务器。在这种情况下,你会在http服务器错误日志文件中看到一个明确的提示,提示不支持[END]标志。你可以尝试升级或使用旧的[L]标志,在这种情况下它可能会工作相同,虽然这取决于你的设置。
此实现在http服务器主机配置或分布式配置文件中的工作方式类似(“.htaccess”文件)。显然重写模块需要在http服务器内部加载并在http主机中启用。如果您使用分布式配置文件,则需要注意在主机配置中启用了它的解释,并且它位于主机的“. htaccess”文件中。s DOCUMENT_ROOT文件夹。
还有一个一般性的评论:您应该始终倾向于将此类规则放置在http服务器主机配置中,而不是使用分布式配置文件(“.htaccess”)。这些分布式配置文件增加了复杂性,通常是意外行为的原因,难以调试,并且它们确实会降低http服务器的速度。它们仅作为最后一个选项提供,用于您无法访问真实http服务器主机配置的情况(请阅读:真正便宜的服务提供商)或坚持编写自己的规则的应用程序(这是一个明显的安全噩梦)。

zbdgwd5y

zbdgwd5y2#

以下内容似乎对我很有效:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [OR]
RewriteCond %{HTTPS} off
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

我希望这能帮到一些人

相关问题