Наверх

Как с помощью .htaccess убрать из ссылки .html?

Автор kbaott, 11.02.2013 | Просмотров: 4 979 |

Итак, проблема стояла следующая: Удалить из ссылки часть .html при помощи файла .htaccess. Зачем это понадобилось? Все началось с того, что я установил на этот блог плагин WP-Print (найти его можно в репозитории WordPress), который создает версию для печати к записи или странице. Как и было сказано в ридми к плагину, я выполнил следующие требования:

(1) В каталоге темы wp-content/themes/<YOUR THEME NAME>/ найти следующие файлы single.php, post.php, page.php, etc и т. п..
(2) В них найти строку:

<?php while (have_posts()) : the_post(); ?>

(3) После (2), в том месте где должна быть ссылка на версию для печати, вписать код:

<?php if(function_exists('wp_print')) { print_link(); } ?>

Ссылка появилась, но, увы, не заработала. Проблема нашлась быстро. Ссылки на все мои посты имели следующий вид:

http://kbaott.ru/nazvanie-novosti.html

А когда плагин WP-Print добавлял свою часть в ссылку получалось следующее:

http://kbaott.ru/nazvanie-novosti.html/print/

Конечно, такой баян не будет работать. К слову, регенерация пермалинков в админке WordPress (постоянные ссылки) не помогла. Поэтому пришлось постоянные ссылки менять на другую схему:

http://kbaott.ru/nazvanie-novosti/

Теперь плагин заработал, так как ссылки на печатную версию приняли вид:

http://kbaott.ru/nazvanie-novosti/print

Но открылась новая проблема — записи перестали отвечать на новые ссылки и выдавали 404 ошибку. Это очень неприятно, так как блог проиндексирован, да и на некоторые статьи есть внешние ссылки.

В решении проблемы помог великий и ужасный .htaccess. Все, на самом деле просто, в корне сайта нужно найти и открыть файл .htaccess (или создать его) и добавить в него следующие строки, заменяя при этом «ваш_сайт.ру» на настоящую ссылку на ваш сайт:

RewriteEngine on
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^.]+)\.html\ HTTP
RewriteRule ^([^.]+)\.html$ http://ваш_сайт.ру/$1 [R=301,L]
RewriteCond %{REQUEST_URI} !(\.[^./]+)$
RewriteCond %{REQUEST_fileNAME} !-d
RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule (.*) /$1.html [L]

После этого старые ссылки начинают работать — спокойно и тихо редиректят посетителя на ту же статью, только по новой ссылке.

Также есть другой способ .htaccess-редиректа, он короче, но не у всех работает:

REWRITECOND %{HTTP_HOST} ^ваш_сайт.ру [NC]
REDIRECTMATCH 301 (.*)\.html$ http://ваш_сайт.ру$1

Надеюсь этот опыт кому-то пригодится, так как мне он очень помог!

Вместо эпилога:

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

Метки: ,
Писано 11.02.2013

Понравилась статья? Тогда получайте обновления на e-mail: