У меня на хостинге отсутствует поддержка своих Error Pages (конкретно для несуществующих - NOT FOUND), решил реализовать это через RewriteRule.
Теперь конкретики.
Есть 1 файл:
например:
HTML |
site.ru/index.php?about |
HTML |
site.ru/index.php?main |
HTML |
site.ru/index.php?contact |
поставил на него ЧПУ, привёл к виду:
Теперь сам вопрос....
Ошибочных страниц не возникает если вводить
HTML |
site.ru/219321938ц8вошыовйцшщво1238г |
т.к. стоит к ним ЧПУ
соотвественно:
HTML |
index.php?219321938ц8вошыовйцшщво1238г |
Я избавился от формата .html (т.к. у меня он не используется)
Теперь вопрос как избавиться от всех страниц php,
кроме:
т.е. если человек введёт:
HTML |
site.ru/белеберда.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 написал(а):
Да незачто!
Единственная фишка - один уровень. Тоесть например /about/contacts/ не получится при таком правиле.
UPD а чтобы было много уровней - нужно производить разбор строки в
php. Тоесть получаешь /about/contacts/, тримишь слэши (about/contacts), разбиваешь по слэшам, чтобы получить массив уровней.
Спустя 2 часа, 32 минуты, 15 секунд (29.03.2009 - 00:39) Семён написал(а):
не у меня с этим проблем не будет, т.к. сайт одноуровневый.