Mod_rewrite добавить расширение файла, удалить последний слэш, дописать букву l в .htm

dandandan

Мой дом здесь!
Регистрация
7 Авг 2008
Сообщения
1.036
Реакции
293
Есть урл Например: localhost/hotel/mogu/prikrutit-golosovanie.html

Надо:
1. если урл вида /hotel/mogu/prikrutit-golosovanie
добавить в конце .html

2. если урл вида /hotel/mogu/prikrutit-golosov-anie/
убрать последний слеш и добавить в конце .html, чтобы получилось localhost/hotel/mogu/prikrutit-golosovanie.html

3. если урл вида /hotel/mogu/prikrutit-golosov-anie.htm
добавить в конце букву L , чтобы получилось localhost/hotel/mogu/prikrutit-golosovanie.html

4. Из полученного урла в переменную id записать hotel/mogu/prikrutit-golosovanie

5. Первые 3 пункта должны сопровождаться 301 редериктом.

6. Правила привязать только к директории, где находится файл htacsess (не знаю как сделать)

Все запросы переводятся на скрипт index.php . Внутри скрипта стоит код:


PHP:
if (isset($_GET['id'])){
echo $_GET['id'];
}
else{
echo 'Главная.';
}
PHP:
RewriteEngine On
 
# для 4 пункта
RewriteRule ^(.*)\.html$ /index.php?id=$1 [L,NS]
 
#Написал правила для первых 3 пунктов:
# добавляем L в .html в конце если закончилось .htm
 
RewriteCond %{REQUEST_URI} (.htm)$ [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1l [NS,L,R=301]
# конец добавляем L в .html в конце если закончилось .htm
 
# добавляем .html в конце если ссылка закончилась просто текстом со слешем на конце
#удалил слеш на конце
RewriteRule ^(.*)\/$ /$1 [NS,L,R=301]
# конец добавляем .html в конце если ссылка закончилась просто текстом со слешем на конце
 
# добавляем .html в конце если ссылка закончилась просто текстом без слеша на конце
RewriteCond %{REQUEST_URI} !(\.html)$ [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1.html [NS,L,R=301]
# конец добавляем .html в конце если ссылка закончилась просто текстом без слеша на конце
По отдельности правила работают. При совмещении получаю ошибку в браузере: Неверное перенаправление на странице.

Если закомментировать вот это правило: то все ок

PHP:
# добавляем .html в конце если ссылка закончилась просто текстом без слеша на конце
RewriteCond %{REQUEST_URI} !(\.html)$ [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1.html [NS,L,R=301]
# конец добавляем .html в конце если ссылка закончилась просто текстом без слеша на конце

Что где подправить и может есть более лучшее решение?
 
Код:
RewriteEngine on
RewriteBase /hotel/mogu/
 
RewriteRule (.+)\.htm$ /$1.html [R=301,L]
 
RewriteCond %{REQUEST_URI} !\.html$
RewriteRule (.+)/$ /$1.html [R=301,L]
 
RewriteCond %{REQUEST_URI} !\.html$
RewriteCond %{REQUEST_URI} !\..*$
RewriteRule (.+) /$1.html [R=301,L]
 
RewriteCond %{REQUEST_URI} \.html$
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(.*)\.html$ /index.php?id=$1 [L]
Только в GET запрос будет отправлятся полный URL относительно сервера.
 
Перехожу по ссылке

Перекидывает на эту страницу:


Проверил в другом браузере. Там нормально работает. Видимо закешировались страницы. Если не поможет, то отпишусь.

В обоих браузерах не работает редерикт с .htm на .html
 
Назад
Сверху