.htaccess 问题:添加了尾部斜杠,但不适用于子目录

.htaccess 问题:添加了尾部斜杠,但不适用于子目录

我在互联网上找到了一个运行良好的 .htaccess 代码,它删除了 .html 扩展名并在 URL 末尾添加了一个斜杠。

但是,当我链接到子目录中的站点时,它不起作用,子目录在 URL 中自动被删除,因此页面无法加载。

这是我的.htaccess 代码:

AddHandler application/x-httpd-php71 .php

AddDefaultCharset utf-8

RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301,NC]


RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^([^/]+)/$ $1.html 

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)$ /$1/ [R=301,L]

我在所述子目录中也有相同的 .htaccess,我不确定这是否是执行此操作的正确方法。

我可能需要补充一点,我对编码完全陌生,我刚刚开始整理我的网站更新,主要是通过对编码进行广泛的谷歌搜索,但我真的不知道我在做什么。

有人知道如何解决此问题吗?

编辑:为了澄清起见,我可以补充说,我所谈论的子目录是同一网站的一部分,因此我希望将其中的某些部分保留在子目录中,以保持井然有序。

答案1

我在所述子目录中也有相同的 .htaccess,我不确定这是否是执行此操作的正确方法。

嗯,这实际上取决于您的 URL 结构以及您有多少个路径段。.htaccess您发布的“运行良好”的代码仅适用于单个路径段,即文档根目录中的文件。

但是,您不需要.htaccess在子目录中重复此文件。事实上,如果在子目录中使用这些指令,它们就不正确了 - 这可能是您的子目录被“删除”的原因。最后一行 ( RewriteRule (.*)$ /$1/ [R=301,L]) 将在子目录内使用时从重定向请求中删除子目录。

请尝试:

  1. 删除.htaccess子目录中的文件。

  2. 更改以下指令:

    RewriteRule ^([^/]+)/$ $1.html 
    

    读书:

    RewriteRule ^(.+)/$ $1.html
    

    为了定位任何目录级别。否则,它仅限于定位文档根目录中的文件。

相关内容