【问题标题】:How do I combine these two .htaccess rules?如何结合这两个 .htaccess 规则?
【发布时间】:2021-09-26 22:38:11
【问题描述】:

我想结合这两个规则,但不知道如何

RewriteRule ^([^\.]+)$ $1.html [L] 
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]

当我把两者都放上时,我收到错误“重定向太多”

我的目标是将两者结合起来,

第一条规则是删除文件扩展名(例如 html)

第二条规则是:让每个网址都转到https://www.example.com,而不是https://example.com

【问题讨论】:

  • 您是否尝试在此处重定向到与请求的主机名不同的外部域?因为如果不是,第二条规则本身应该已经导致错误。
  • 另外,还不清楚将这两者结合起来应该产生什么意义。第一个是添加.html 后缀的内部重写,而不向用户显示新的 URL - 第二个是外部重定向。因此,如果您将两者结合,.html 后缀 将显示在结果 URL 中。
  • 简而言之:请花更多时间修改您的问题(下面有一个“编辑”链接,请使用它)。尝试解释您确切地要达到的目标,而不是您认为可以如何实现目标。
  • @arkascha 我已经编辑了这篇文章以详细说明。立即查看。

标签: apache .htaccess redirect mod-rewrite


【解决方案1】:

根据您现在提供的其他信息,我建议采用这种方法:

RewriteEngine on

RewriteCond %{HTTP_HOST} !^www\.example\.com$
RewriteRule ^ https://www.example.com%{REQUEST_URI} [R=301,END]

RewriteRule ^/?(.+)\.html$ /$1 [R=301,END]

RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_URI}.html [END] 

一般来说,开始使用R=302 临时 重定向是一个不错的选择,并且只有在一切按预期工作时才将其更改为R=301 永久 重定向。这可以防止令人讨厌的缓存问题...

【讨论】:

  • 非常感谢!它有效!
  • 由于某种原因似乎不再工作。昨天还可以,完全没问题,现在不行了。除了域,我没有编辑任何其他内容。
  • 这是我遇到的^^i.imgur.com/UXbvOkG.png
  • 对此我无能为力。您将需要开始调试 - 1. 检查您的 http 服务器的错误日志文件中的条目。 2. 确保应用了重写规则集,例如修改它以使其包含明确的语法错误并发出测试请求 - 你得到什么响应,你的错误日志文件中出现什么? 3. 如果您无法获得更多信息,那么您将不得不考虑重写日志记录 - apache 重写模块的文档解释了如何启用此类额外的日志记录。它可以让您详细了解正在发生的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-28
  • 2011-02-01
相关资源
最近更新 更多