Назад | Перейти на главную страницу

Проблема .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 в указанном подкаталоге, и я не уверен, что это правильный способ сделать это.

Возможно, мне придется добавить, что я совсем новичок в кодировании, я только начал собирать обновление своего веб-сайта, в основном путем обширных поисков в Google по кодированию, но я действительно не знаю, что делаю.

Кто-нибудь знает, как я могу исправить эту проблему?

Изменить: для пояснения я могу добавить, что подкаталог, о котором я говорю, является частью того же веб-сайта, поэтому некоторые его части я хотел бы сохранить в подкаталоге только для того, чтобы все было организовано.

У меня также есть тот же самый .htaccess в указанном подкаталоге, и я не уверен, что это правильный способ сделать это.

Что ж, это действительно зависит от вашей структуры URL и количества сегментов пути. "Хорошо работающий" .htaccess опубликованный вами код работает только с отдельными сегментами пути, т.е. файлы в корне документа.

Однако повторять это не нужно. .htaccess файл в подкаталоге. На самом деле, эти директивы неверны, если используются в подкаталоге - вероятно, поэтому ваш подкаталог «стирается». Последняя строка (RewriteRule (.*)$ /$1/ [R=301,L]) удалит подкаталог из перенаправленного запроса при использовании внутри подкаталога.

Вместо этого попробуйте:

  1. Удалить .htaccess файл в подкаталоге.

  2. Измените следующую директиву:

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

    Читать:

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

    Чтобы настроить таргетинг на любой уровень каталога. В противном случае он ограничивается нацеливанием только на файлы в корне документа.