我在互联网上找到了一个运行良好的 .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]
) 将在子目录内使用时从重定向请求中删除子目录。
请尝试:
删除
.htaccess
子目录中的文件。更改以下指令:
RewriteRule ^([^/]+)/$ $1.html
读书:
RewriteRule ^(.+)/$ $1.html
为了定位任何目录级别。否则,它仅限于定位文档根目录中的文件。