首页 > 解决方案 > 多次调用配置网站不起作用

问题描述

试图让这两者一起工作。我尝试了几种不同的方法来构建代码,但都没有运气。我不确定我做错了什么,即使答案看起来很基本。

尝试重定向到 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]

标签: .htaccess

解决方案


看起来您正试图将规则混搭在一起。这是两个独立的规则,应该完全独立。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 源代码中删除。


推荐阅读