1 | |
Руководство по настройке ЧПУ (Rewrite)16.09.2012, 15:48. Показов 77712. Ответов 7
В последнее время участились темы с проблемами по настройке ЧПУ (Rewrite)
Поэтому я решил написать это руководство Для начала создайте файл .htaccess со следующим содержимым: Код
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [L,QSA] Код
Options +FollowSymlinks
3
|
16.09.2012, 15:48 | |
Ответы с готовыми решениями:
7
Подскажите парочку уроков по настройке ЧПУ на сайте. Какова вероятность того, что 2 из них нуждаются в общей настройке? Больше 2-х телевизоров нуждается в настройке? ЧПУ работает, но с админки перенаправляет без ЧПУ. Так и должно быть? Был сайт без ЧПУ, потом с "некрасивыми" ЧПУ |
47 / 30 / 2
Регистрация: 11.06.2011
Сообщений: 206
|
|
23.09.2012, 00:48 | 2 |
а кириллические имена тут можно использовать?
1
|
23.09.2012, 11:46 [ТС] | 3 |
Да. Может помочь: mod_rewrite. настройка .httasses на html - сайте
2
|
Почетный модератор
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
27.09.2012, 00:22 | 4 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Несколько слов по поводу флагов, которые пишутся внутри квадратных скобок, стоящих после регулярного выражения. Основные и самые часто используемые это вот эти:
Для преобразования самые полезные L, QSA и E, а также иногда NC (зависит от правил). Остальные полезны для перенаправлений/статусов и т.п. P.S. это не все флаги, их еще раза в два или три больше) Здесь только основные на мой взгляд. Можно также указывать несколько флагов через запятую. К примеру, как в сообщении выше: [L,QSA] или вот еще ситуация когда нужно несколько [R=301,L] - если не остановить преобразования (L) то они будут продолжать выполняться дальше. А это уже лишнее По поводу RewriteCond. Она используется для указания условий, при которых выполняется правила RewriteRule. К примеру эти две строчки означают
Если вначале (перед дефисом) поставить восклицательный знак, то будет отрицание (т.е. наоборот) Чаще всего используют только -f и -d (вернее, !-f и !-d) Ну и немного об самих переменных сервера - сами они пишутся внутри фигурных скобок, а перед ними ставится знак процента. Вкратце о них:
Об остальных можете почитать в документации к серверу APACHE либо в документации к $_SERVER php. Самые часто используемые - REQUEST_FILENAME, REQUEST_URI и QUERY_STRING в RewriteCond тоже можно писать флаги - NC (уже знакомое), OR (либо следующее), NV (если заголовок HTTP используется в условиях, то этот заголовок добавляет к остальным, как то так) Ну и последние две:
ну и само
Ну.. Вроде все, если где то ошибся - прошу сообщить Благодарю за внимание Добавлено через 2 минуты P.P.S. офф дока по модулю mod_rewrite: http://httpd.apache.org/docs/2... write.html
16
|
20 / 6 / 0
Регистрация: 20.05.2012
Сообщений: 6
|
|
28.09.2012, 00:13 | 5 |
Вот ещё может быть полезно:
Шпаргалка по mod_rewrite Шпаргалка по регулярным выражениям P.S. Всё в PDF
6
|
Почетный модератор
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
|||||||||||||||||||||||||||||||
11.10.2012, 13:07 | 6 | ||||||||||||||||||||||||||||||
Решил еще немного написать по настройке ЧПУ. Простой пример: есть у нас ссылка вида
Код
site.ru/index.php?category=avto&type=buy&id=1 Код
site.ru/avto/buy/1/ Код
site.ru/category/avto/buy/1/ Код
site.ru/index.php?category=avto&type=buy&id=1 Код
site.ru/avto/buy/1/ ЧПУ можно делать как и с единой точкой входа - все запросы перенаправлять на один файл - а там уже разбирать пришедший запрос и показывать нужную информацию, так и "по обычному" - с передачей нескольких параметров. Я коротко опишу оба, на процедурном подходе, без всяких паттернов и т.п. чтобы все смогли разобраться. 1 способ ("по обычному") Итак, что же для этого всего необходимо. Во-первых, конечно же сам код для перенаправления. Для ссылки вида Код
site.ru/avto/buy/1/ Код
RewriteEngine On #если запрошенного файла или папки не существует RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f #регулярим) RewriteRule ^(.*)/(.*)/([0-9]+)/?$ index.php?category=$1&type=$2&id=$3 [L,QSA] Левая часть: Код
site.ru/category/avto/buy/1/ Код
RewriteRule ^category/(.*)/(.*)/([0-9]+)/?$ index.php?category=$1&type=$2&id=$3 [L,QSA]
Теперь вторая важная часть. Необходимо поменять все ссылки на нужные нам - это раз. т.е. вместо
Да, и еще. / - это путь от корневой директории, не забывайте. Ну, тут вроде все, перейдем к единой точке входа. 2 способ (единая точка входа). Код для .htaccess будет выглядеть уже как то так например Код
ErrorDocument 404 / RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?route=$1 [L,QSA] Код
RewriteRule ^(.*)$ index.php?route=%{REQUEST_URI} [QSA,L] Можно еще так Код
RewriteRule . index.php [QSA,L] Идем далее. В скрипте мы разбиваем полученную таким образом строку в $_GET['route'] (или $_SERVER['REQUEST_URI']) Я буду разбивать $_GET
Кликните здесь для просмотра всего текста
Добавлено через 10 минут Совсем забыл. При использовании первого способа можно указывать для каждой страницы и для каждой ситуации свои правила, сервер будет обрабатывать именно ту, под регулярку которой попадает запрашиваемый адрес. Если не писать название страницы в правой части - то под регулярку попадут все страницы вашего сайта
15
|
11.11.2012, 11:47 [ТС] | 7 |
Решил написать предупреждение к моему посту https://www.cyberforum.ru/post3455450.html:
Данный код подходит для основных CMS (т. е. Joomla! и Wordpress)! Для других возможно вам надо будет делать что-то типа такого: Код
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] Код
RewriteEngine on # Эта дериктива включает Rewrite RewriteCond %{REQUEST_FILENAME} !-f # Это чтобы если такой файл есть то он не ревратился RewriteCond %{REQUEST_FILENAME} !-d # Это чтобы если такой каталог есть то он не ревратился RewriteRule ^(.*)$ index.php [L,QSA] # Здесь реврайт на index.php, приведём пример другого реврайта на котором будет легче объяснить: #RewriteRule ^(.*)\/(.*)\/(.*)$ index.php?p1=$1&p2=$2&p3=$3 [L,QSA] # Это пример нескольких параметров, приведём пример что делает эта строка со скриптом: # Было index.php?p1=rati&p2=para&p3=lucky # Стало rati/para/lucky
1
|
Почетный модератор
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
|
08.03.2013, 23:54 | 8 |
Иногда появляются вопросы, как сделать перенаправление с www.site.ru на site.ru или наоборот. На самом деле, ничего сложного нет, просто надо добавить нужный код в файле .htaccess (имя начинается с точки)
Редирект с site.ru на www.site.ru: Код
RewriteEngine On RewriteCond %{HTTP_HOST} ^site\.ru$ [NC] RewriteRule ^(.*)$ http://www.site.ru/$1 [L,R=301] Код
RewriteEngine On RewriteCond %{HTTP_HOST} !^site\.ru$ [NC] RewriteRule ^(.*)$ http://site.ru/$1 [L,R=301] Также, иногда возникают вопросы, как "убрать" index.php из ссылки на главной странице. Это можно сделать следующим образом: Код
RewriteEngine On RewriteRule ^index\.php$ / [R=301,L,QSA] Как вариант, для редиректа с "сайт с www" на "сайт без www", чтобы не писать имя нужного сайта, можно сделать таким образом: Код
RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] RewriteRule ^(.*)$ http://%1/$1 [L,R=301] Код
RewriteEngine On RewriteCond %{HTTP_HOST} !^(www\..+)$ [NC] RewriteRule ^(.*)$ http://www.%1/$1 [L,R=301]
9
|
08.03.2013, 23:54 | |
08.03.2013, 23:54 | |
Помогаю со студенческими работами здесь
8
Не работает PostBack обработчик события с ЧПУ. Без ЧПУ работает с ЧПУ - PR=4, без ЧПУ - PR=2. rewrite rewrite Rule Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |