【问题标题】:.htaccess https, www and subdomain silent rewrite.htaccess https、www 和子域静默重写
【发布时间】:2021-07-31 03:01:44
【问题描述】:

我需要:

  • 添加 www,因此用户将:

    • 输入https://example.com/test.html
    • 在浏览器中查看https://www.example.com/test.html
    • example.com/test.html获取文件
  • 添加 http -> https 重定向,因此用户将:

    • 输入http://www.example.com/test.html
    • 在浏览器中查看https://www.example.com/test.html
    • example.com/test.html获取文件
  • 添加子域 silent 重定向,因此用户将:

    • 输入https://new.example.com/test.html
    • 在浏览器中查看https://new.example.com/test.html
    • example.com/new/test.html获取文件
  • 当然还有结合,例如:

    • 输入http://new.example.com/test.html
    • 在浏览器中查看https://new.example.com/test.html
    • example.com/new/test.html获取文件

这是否可以通过 .htaccess 文件实现,最终如何实现?

www 和 https 转发对我来说已经可以正常工作了,但我不知道如何对子域进行静默转发:

RewriteEngine On

# https
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# WWW
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} !^new\. [NC]
RewriteRule (.*) https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

谢谢。

【问题讨论】:

  • 请在您的问题中分享您的 htaccess 规则文件,这是鼓励提问者在他们的问题中投入的努力,谢谢。
  • 我已经尝试了一些东西,但是我现在在 .htacces 文件中没有任何东西,因为我尝试的所有东西都不起作用。
  • 就像努力尝试添加您尝试过的任何内容一样,没有对错,否则问题可能会出现在题外话类别中,谢谢。一旦我添加它,我会尽力在这里提供帮助,干杯。
  • 谢谢,我添加了 www 和 https 的规则,这对我来说很好,但我不知道如何添加静默转发。
  • new.example.comexample.com 是否指向同一主机上的同一目录?

标签: apache .htaccess url


【解决方案1】:

您可以在站点根目录 .htaccess 中尝试这些规则:

DirectoryIndex index.php
RewriteEngine On

# add www for main domain
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [NE,R=301,L]

# add https for all domains
RewriteCond %{HTTPS} !on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [NE,R=301,L]

# for new domain silently forward to new/ directory
RewriteCond %{HTTP_HOST} ^new\.example\.com [NC]
RewriteRule !^new/ new%{REQUEST_URI} [NC,L]

确保站点根目录中除了这些行之外没有任何其他代码,并且必须完全清除浏览器缓存。

【讨论】:

  • 您好,谢谢,我不知道,这对我也不起作用。我仍然收到“重定向过多”错误,但我认为问题出在我的托管服务提供商处。我已经用PHP解决了。
  • 在 Chrome 开发工具中使用 缓存禁用 进行测试,然后在“网络”选项卡中检查您获得的 301/302 重定向 URL 是什么。
【解决方案2】:

根据您显示的尝试/示例,您能否尝试以下操作。请按照以下方式确保您的 htaccess 规则,并在测试您的 URL 之前清除您的浏览器缓存。

RewriteEngine ON
RewriteCond %{HTTPS} !on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [NE,R=301,L]

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [NE,R=301,L]
    
RewriteCond %{HTTP_HOST} ^new\.example\.com [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/?$ new/index.php?$1 [QSA,L]

RewriteCond %{HTTP_HOST} ^new\.example\.com [NC]
RewriteCond %{REQUEST_URI} !^/new [NC]
RewriteRule ^(.*)/?$ new/$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/?$ index.php?$1 [QSA,L]

【讨论】:

  • @TadeasekF,好的,有一个错字,我已经修正了,请在您的文件中编辑规则并清除浏览器缓存,然后再试一次。
  • @TadeasekF,好的,我现在已经编辑了规则,请你现在试试,告诉我进展如何,谢谢。
  • @TadeasekF,你能告诉我你点击的示例网址是什么吗?
  • @TadeasekF,好的,请告诉我不存在的页面,例如 http://example.com 等,您要从哪个文件中提供服务?例如--> index.php 等?该文件还存在于新文件夹中的什么位置?请确认一次。
  • @TadeasekF,那么这些规则应该有效。您能否在我的规则中放置一条测试线(临时目的)-------- 并检查任何规则,如果您收到 500 内部错误意味着它已启用,否则它未启用,请告诉我情况如何,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-16
  • 2015-01-10
相关资源
最近更新 更多