.htaccess - 多次调用配置网站不起作用
问题描述
试图让这两者一起工作。我尝试了几种不同的方法来构建代码,但都没有运气。我不确定我做错了什么,即使答案看起来很基本。
尝试重定向到 SSL 并删除 .html
Options -Indexes
RewriteEngine On
RewriteBase /
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ https://www.website.com.au/$1 [R=301,L]
RewriteRule ^(.*)$ $1.html [NC, L]
解决方案
看起来您正试图将规则混搭在一起。这是两个独立的规则,应该完全独立。RewriteCond
指令仅适用于RewriteRule
随后的第一个。但是您也不想.html
从 HTTP 到 HTTPS 重定向中排除目录和文件请求。
检查.html
文件是否存在的条件并不严格正确。根据请求的 URL,这可能会导致重写循环,因为您没有测试最终要重写的同一事物。请参阅我对以下 ServerFault 问题的回答,该问题对此进行了更详细的说明:
请尝试以下操作(在您的根.htaccess
文件中):
Options -Indexes
RewriteEngine On
RewriteBase /
RewriteCond %{SERVER_PORT} 80
RewriteRule (.*) https://www.example.com/$1 [R=301,L]
RewriteCond %{DOCUMENT_ROOT}/$1.html -f
RewriteRule (.*) $1.html [L]
补充说明:
- 不需要目录文件系统检查,除非您的目录也以
.html
. - 正则表达式与默认情况下正则表达式是贪婪
(.*)
的相同。^(.*)$
- 无需反斜杠转义
RewriteCond
TestString中的文字点,因为这不是正则表达式,并且点在这里没有特殊含义。IE。%{REQUEST_FILENAME}\.html
- 反斜杠在这里是多余的。 - 你在
RewriteRule
标志中有一个错误的空间,即。[NC, L]
- 这将导致 500 错误响应(“无效标志”)。应该是[NC,L]
。 - 上的
NC
标志RewriteRule
是多余的,因为无论如何您都匹配所有内容。
在旁边:
...并删除 .html
虽然最终目标是“删除.html
” - 这些指令专门将其添加回来(它们不会“删除”任何东西)。该.html
扩展可能已在您的 HTML 源代码中删除。
推荐阅读
- java - springboot使用mysql得到NullPointerException错误
- python - python从列表中的值分配变量
- r - 有没有办法将具有一系列 grid.* 和视口调用的函数转换为 grob/gTree?
- r - 当有多个数据表要显示时,RowGroup 函数不起作用
- c++ - 为什么在代码和环境中使用 cs_5_0 时出现错误“X3666 cs_4_0 不支持无人机类型”?
- reactjs - API 正在工作,但我无法让 axios 写出从 API 返回的数据
- ios - Swift 4 - while 循环和 UI 元素
- node.js - 有没有办法在不加载实体的情况下运行 typeorm 查询构建器?
- java - 将 Flutter 图标传递给 android java
- c - 代码正在编译,但不会使用命令行提示符打印