#.htaccess
Вопрос:
Есть несколько вопросов по этому поводу, но ни один из ответов, похоже, не работает для меня.
Как мне отредактировать свой .htacess
файл, чтобы перейти от этого: https://www.website.com/removethis/keepthis.html
К этому: https://www.website.com/keepthis
Я успешно удалил .html
часть со следующими строками:
RewriteEngine on
RewriteCond %{THE_REQUEST} /([^.] ).html [NC]
RewriteRule ^ /%1 [NC,L,R]
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_URI}.html [NC,L]
Это удаление вложенной папки, которая, похоже, не работает. Я пытался разобраться в доступной документации, но я довольно новичок в этом. Если это имеет значение, мой веб-сайт размещен на Namecheap (cPanel). Любая помощь будет очень признательна!
Комментарии:
1. Я должен добавить, что следующий код работал, но оказался index.html в каталог.. итак, если есть способ применить это правило ко всему, КРОМЕ index.html, это может сработать..
RewriteEngine On RewriteRule ^$ sub/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ sub/$1
Ответ №1:
Попробуйте сделать что-то вроде следующего в корневом .htaccess
файле. Обратите внимание, что вы, должно быть, уже ссылаетесь на канонические URL — адреса в своем HTML-источнике (см. Ниже*1) — похоже, что это не так?
Options -MultiViews
DirectoryIndex index.html
RewriteEngine On
# Redirect "/removethis/index.html" to "/"
# - Only direct requests should be redirected
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^removethis/(.*/)?index.html$ /$1 [R=302,L]
# Redirect "/removethis/keepthis.html" to "/keepthis"
# - Only direct requests should be redirected
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^removethis/(.*/)?([^/.] ).html$ /$1 [R=302,L]
# Rewrite "/" to "/removethis/"
# Or "/foo/bar/baz/" to "/removethis/foo/bar/baz/"
# - Only if the target directory exists
RewriteRule %{DOCUMENT_ROOT}/removethis/$1 -d
RewriteRule ^(|[^.] /)$ removethis/$1 [L]
# Rewrite "/keepthis" to "/removethis/keepthis.html"
# - Only if the target file exists
RewriteRule %{DOCUMENT_ROOT}/removethis/$1.html -f
RewriteRule ^([^.] )$ removethis/$1.html [L]
Это обрабатывает расширение .html
файла и скрытый подкаталог (т. е. /removethis
) в единой директиве.
Перенаправления для удаления подкаталога ( /removethis
) и .html
расширения файла должны обрабатываться только по прямым запросам, а не по переписанным запросам при последующей перезаписи (в противном случае вы получите цикл перенаправления). Проверка по переменной REDIRECT_STATUS
среды гарантирует это.
URL-путь может состоять из нескольких сегментов пути. например /foo/bar/baz
, он внутренне переписывается . /removethis/foo/bar/baz.html
И внешне перенаправлены в другом направлении. Особое внимание уделяется index.html
( DirectoryIndex
документу).
*1 Вам необходимо убедиться, что вы уже ссылаетесь на канонические URL-адреса в своем HTML-источнике. Перенаправления здесь предназначены только для сохранения SEO, если вы изменяете существующую структуру URL-адресов.
Например, вы уже должны ссылаться на канонические URL-адреса формы:
/
— корень документа (домашняя страница)/keepthis
— Файлы не заканчиваются косой чертой/path/to/file
— Файлы не заканчиваются косой чертой/path/to/dir/
— Каталоги заканчиваются косой чертой
И не:
/removethis/index.html
— корень документа (домашняя страница)/removethis/keepthis.html
/removethis/path/to/file.html
/removethis/path/to/dir/index.html
В конечном итоге перенаправление должно быть 301 (постоянным), но измените его только после того, как вы подтвердите, что оно работает должным образом.