好的,我的网站有问题。
htaccess 文件中的这条规则使链接起作用。
RewriteCond %{REQUEST_FILENAME} !-f 重写规则 ^([^.]+)$ $1.html [NC,L]
目录索引index.htmlindex.php /index.html 选项+索引
如果我打开第 1 项的规则,则第 2 项不起作用。
我做错了什么?
****************HT访问文件********
重写引擎开启
RewriteCond %{HTTP_HOST} !^www.example.com$ [NC] 重写规则 ^(.*)$ https://www.example.com/$1 [L,R=301]
RewriteCond %{HTTPS} !=on 重写规则 ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
RewriteCond %{REQUEST_FILENAME} !-f 重写规则 ^([^.]+)$ $1.html [NC,L]
目录索引index.htmlindex.php /index.html 选项+索引
我已尝试删除上述规则 1 或 2。修复一种行为,破坏另一种行为。
嗯,问题是您重写了旨在以内部文件名和文件扩展名为
.html
的目录为目标的请求。那是因为你的条件RewriteCond %{REQUEST_FILENAME} !-f
匹配,因为你不能拥有与目录同名的文件。这意味着应用以下重写规则:/directory
=> /directory.html
。这不是您想要的。
我建议使用这种组合:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_URI}.html [L]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ %{REQUEST_URI}/.index.html [L]
所以你的完整配置文件看起来像这样(我冒昧地建议进行更多更改):
RewriteEngine On
RewriteCond %{HTTPS} != on
RewriteRule ^ https://www.example.com%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^www\.example\.com$
RewriteRule ^ https://www.example.com%{REQUEST_URI} [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_URI}.html [L]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ %{REQUEST_URI}/.index.html [L]