HTACCESS 目录与重写条件

问题描述 投票:0回答:1

好的,我的网站有问题。

  1. 大多数链接都设置为转到不带扩展名 /page 的页面名称,而不是 page.html

htaccess 文件中的这条规则使链接起作用。

RewriteCond %{REQUEST_FILENAME} !-f 重写规则 ^([^.]+)$ $1.html [NC,L]

  1. 我们希望能够让用户访问domain.com/directory,而不必访问domain/directory/index.html

目录索引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。修复一种行为,破坏另一种行为。

linux .htaccess web-hosting directoryindex
1个回答
0
投票

嗯,问题是您重写了旨在以内部文件名和文件扩展名为

.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]

© www.soinside.com 2019 - 2024. All rights reserved.