DirectorySla sh Off Конфигурация - PullRequest
0 голосов
/ 21 января 2020

Сайт html, у меня есть 3. html файлы с 3 каталогами с одинаковыми именами. Кстати, его apache2 на Ubuntu 18

Итак ...... файл1. html / файл1 файл2. html / файл2 и так далее.

Нет проблем, если вы не отключите расширения в своем файле .htaccess. Но при этом каталог обслуживается, и вы получаете ошибку. Итак, вот мой конфиг .htaccess, пытающийся использовать DirectorySla sh Off. В этом файле происходит кое-что еще, но я решил оставить все как есть на случай, если здесь будут происходить связанные причины / следствия.

# BEGIN
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
Options +MultiViews
DirectorySlash Off
# Rewrite to file when file and directory both exist with the same name
RewriteCond %{DOCUMENT_ROOT}/$1.html -f
RewriteRule ^([^.]+)$ $1.html [L]
# Allows files to be loaded without extensions
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html [NC,L]
# Removes the file extensions
RewriteCond %{THE_REQUEST} /([^.]+)\.html [NC]
RewriteRule ^ /%1 [NC,L,R]
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_URI}.html [NC,L]
Redirects from products to product directory
RewriteRule ^products/(.*)$ /product/$1 [R=301,NC,L]
</IfModule>
# END

1 Ответ

0 голосов
/ 22 января 2020

Вы могли бы дать приоритет файлу, когда он приходит без / с тем же именем и каталогом, а также с расширением файла html, например:

DirectorySlash Off
RewriteEngine on 
RewriteCond %{THE_REQUEST} \s/+(.*?/)?(?:index)?(.*?)\.(html)[\s?/] [NC]
RewriteRule ^ /%1%2 [R=302,L,NE]
RewriteCond %{REQUEST_FILENAME}   !-f 
RewriteCond %{REQUEST_FILENAME}\.html -f 
RewriteRule ^(.*) /$1.html [L]
RewriteCond %{REQUEST_FILENAME}   !-f 
RewriteCond %{REQUEST_URI} !\/$
RewriteRule ^(.*) %{REQUEST_URI}/ [L,R=302]

Затем добавьте свой остальные правила:

RewriteRule ^products/(.*)$ /product/$1 [R=301,NC,L]

Таким образом, с помощью приведенного выше кода расширение HTML будет удалено, затем сервер сначала проверит, существует ли файл HTML, соответствующий этому запросу, а затем, если существует соответствие каталога этот запрос.

Очистите кеш браузера и проверьте его, если все в порядке, измените 302 на 301, чтобы получить постоянное перенаправление

Для получения дополнительной информации, вы также можете обратиться к моему предыдущему ответу:

Удалить. php и. html расширения И имеют каталоги с одинаковыми именами?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...