[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Есть специалисты RewriteRule?
Семён
У меня на хостинге отсутствует поддержка своих Error Pages (конкретно для несуществующих - NOT FOUND), решил реализовать это через RewriteRule.

Теперь конкретики.

Есть 1 файл:
HTML
index.php


например:
HTML
site.ru/index.php?about

HTML
site.ru/index.php?main

HTML
site.ru/index.php?contact


поставил на него ЧПУ, привёл к виду:
HTML
site.ru/about

HTML
site.ru/main

HTML
site.ru/contact


Теперь сам вопрос....
Ошибочных страниц не возникает если вводить
HTML
site.ru/219321938ц8вошыовйцшщво1238г

т.к. стоит к ним ЧПУ
соотвественно:
HTML
index.php?219321938ц8вошыовйцшщво1238г


Я избавился от формата .html (т.к. у меня он не используется)
Теперь вопрос как избавиться от всех страниц php,
кроме:
HTML
index.php

т.е. если человек введёт:
HTML
site.ru/белеберда.php

попадал всё равно на
HTML
index.php?белеберда


ЗАРАНЕЕ СПС.





Спустя 1 час, 50 минут, 23 секунды (28.03.2009 - 19:32) kirik написал(а):
Цитата (Семён @ 28.03.2009 - 09:42)
т.е. если человек введёт:


Как-то так?
Код
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} .php$
RewriteRule (.+).php index.php?$1 [L]

Спустя 1 час, 27 минут, 31 секунда (28.03.2009 - 21:00) Семён написал(а):
Неа не оно.
Вот когда пишешь такое
RewriteRule ^(.*php)(/?)+$ index.php?$1 [L]
Всё что я хочу работает.... т.е. ошибки NOT FOUND нет, то при этом открывается всегда главная страница т.е. index.php
Т.е. это правило перекрывает мне всё остальное ЧПУ.
т.е. перестаёт открываться допустим есть страница site.ru/about/ (открывается) главная страница..... т.е. такое ощущение что он не делает index.php?about, а делает либо пустой либо что-то другое.

Спустя 26 минут, 10 секунд (28.03.2009 - 21:26) kirik написал(а):
Цитата (Семён @ 28.03.2009 - 13:00)
Вот когда пишешь такое
RewriteRule ^(.*php)(/?)+$ index.php?$1 [L]
Всё что я хочу работает....

В этом правиле при запросе /about.php в GET приходит about.php

Цитата (Семён @ 28.03.2009 - 13:00)
т.е. такое ощущение что он не делает index.php?about, а делает либо пустой либо что-то другое.

ну эт всегда можно проверить:
PHP
echo $_SERVER['REQUEST_URI'].'<br /><pre>';
print_r($_GET);


Если ты хочешь чтобы запросы: /about/, /about.php, /about.html давали бы about в GET'е, то попробуй это:
Цитата
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\./]+) index.php?$1

Спустя 5 минут, 16 секунд (28.03.2009 - 21:31) Семён написал(а):
Блин опять тебе обязан Кирик! Весь день мучался! Спс тебе

В итоге получил Русский ЧПУ со всеми примочками )))

Спустя 35 минут, 54 секунды (28.03.2009 - 22:07) kirik написал(а):
Да незачто! smile.gif
Единственная фишка - один уровень. Тоесть например /about/contacts/ не получится при таком правиле.

UPD а чтобы было много уровней - нужно производить разбор строки в php. Тоесть получаешь /about/contacts/, тримишь слэши (about/contacts), разбиваешь по слэшам, чтобы получить массив уровней.

Спустя 2 часа, 32 минуты, 15 секунд (29.03.2009 - 00:39) Семён написал(а):
не у меня с этим проблем не будет, т.к. сайт одноуровневый.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.