Недавно я перешел с использования Wordpress на статический сайт только на html. Когда я переделывал каждую страницу (всего их 6), я сохранял одно и то же имя URL.
Пример: https://reactiongaming.us/alteriwnet/ теперь https://reactiongaming.us/alteriwnet.html
Моя проблема заключается в том, что старые ссылки и результаты поиска Google содержат версию responsegaming.us/alteriwnet/, что приводит к ошибке 404. Я пробовал различные методы .htaccess для «красивых URL-адресов, но ни один из них не работал. Обычно эти вопросы задавались о том, как перенаправить с URL-адреса .html на красивый URL-адрес, но я пытаюсь сделать наоборот.
Всего мне нужно перенаправить только 6 URL-адресов с responsegaming.us/example/ на responsegaming.us/example.html. Есть ли .htaccess или другой способ добиться этого?
Я пытался:
RewriteCond %{THE_REQUEST} \.html [NC]
RewriteRule ^(.*)\.html$ /$1 [R=302,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html [L]
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^.]+)$ $1.html [NC,L]
«Я пробовал разные методы .htaccess» — пожалуйста, прочитайте Как спросить. Вы должны показать нам, что вы пытались.
В простейшей форме RewriteRule (.*)/$ $1.html [R=301]
должно помочь. Если у вас есть настоящие папки, которые нужно исключить из этого правила, перед ними можно поставить RewriteCond с обычным условием !-d
. И шаблон .*
можно сделать более конкретным, если это необходимо.
Вы можете использовать директиву Redirect
для перенаправления ваших старых URL-адресов в новый формат URL-адресов.
Redirect 301 /alteriwnet/ /alteriwnet.html
Это перенаправит 301 /alteriwnet
на /alteriwnet.html
.
Чтобы перенаправить несколько URL-адресов с помощью всего одного кода строки, вы можете использовать RedirectMatch
, который использует шаблон на основе регулярных выражений.
RedirectMatch 301 ^/(alteriwnet|path2|path3)/?$ /$1.html
Использованная литература :
Это кажется довольно простым. Как реализовать это в .htaccess? Просто скопировать код?
@БобСмит Да. Вы можете использовать его в своем htaccess
.
Я добавил ваш первый пример в свой .htaccess, но он не работает. Есть идеи?
@BobSmith У вас есть другие директивы в htaccess, которые могут конфликтовать с этой? Директива Redirect
не будет работать, если у вас есть RewriteRule
, который обрабатывает non-existant
файлы, поскольку директива RewriteRule
имеет приоритет над Redirect
Всего одна строчка от тебя. "Перенаправить 301 /alteriwnet/alteriwnet.html"
@БобСмит Хорошо. Вы получаете какую-либо ошибку с этим Redirect
? Какой URL вы пробовали?
Я попробовал responsegaming.us/alteriwnet и получил ошибку 404.
@BobSmith Я добавил косую черту к шаблону в Redirect
. Пожалуйста, попробуйте обновленную версию.
Обновил, но тот же результат 404.
вроде не читает, но вчера при попытке точно сломал сайт с 500 ошибками. Может это кеш браузера? У меня есть cloudflare в режиме разработки, и я попробовал второй браузер с теми же результатами.
Я собираюсь связаться с моим хостом и посмотреть, не разорван ли он. Ставлю "запретить от всех" а сайт все равно работает так что не читает его.
@BobSmith Да, попросите своего хостинг-провайдера отключить его для вас, тогда вы сможете использовать эти директивы.
В этом была проблема. Я использовал ваше второе предложение, и оно отлично работает. Спасибо.
Очень простым способом было бы создать 1 папку для каждой страницы и переименовать каждую (единственную и единственную) страницу в этой папке index.htm или любое другое имя по умолчанию для индексных страниц, которые использует ваш сайт.