[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как работает .htaccess
Kapitan79
Всем привет!

Мне поставили задачу - преобразовать ссылки в адресной строке сайта в ЧПУ.
Порывшись в интернете, я увидел что большинство людей советуют для этой цели использовать .htaccess. Однако, (по неизвестной науке причине wink.gif ) примеры мне попадались одинаковые, связанные с адресом типа http://www.имя_сайта/имя_каталога/GET_параметры или http://www.имя_сайта/имя_файла/GET_параметры.

У меня же URL вида http://www.имя_сайта/GET_параметры, т.е. на главной странице в зависимости от GET параметров меняются инклюды и ничего больше.

Я попытался вписать в .htaccess следующий код:

RewriteEngine On
RewriteRule ^([A-Za-z0-9-])$?a=$1 [L]

для обработки url http://www.имя_сайта/?a=text , но в результате при открытии страницы выдаётся ошибка 500 Internal Server Error.

Помогите разобраться!

Для начала интересуют вопросы:

1. У меня есть несколько видов GET параметров. Как апач определяет какое правило .htaccess использовать в данном конкретном случае?

2. Какую ошибку я допустил в приведённом мной примере .htaccess? Он не срабатывает даже если я вручную набираю http://www.имя_сайта/?a=text
YVSIK
И это все что тебе надо ля начала осилить
RewriteEngine    on 
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)$ index.php?page=$1 [L,QSA]

особенно вот эту строчку пойми
RewriteRule ^(.*)$ index.php?page=$1 [L,QSA]
это то самое место, где ты пишешь свой адрес
вот он ?a=text
правда тут ещё есть индекс, мой индекс. ну это чтоб не нарушать отчетности- /матроскин/ ;)
она будет у тебя выглядеть так
index.php?a=text

Осnалось теперь ссылки писать как они тебе нужны вот тебе код
/OpenVZ

<li><a href ="/color">color</a></li>
<li><a
href ="/SELECT">SELECT</a></li>
<li><a
href ="/OpenVZ">OpenVZ</a></li>

ОТСЮДА и все отличненько работает

вот ещё пример с коментариями.
RewriteCond %{REQUEST_FILENAME} !-f
#/*'-f' (является ли обычным файлом)*/
#RewriteCond %{REQUEST_FILENAME} !-d
#/*'-d' (является ли каталогом)*/
RewriteCond %{REQUEST_FILENAME} !-l
#/*'-l' (является ли символической ссылкой)*/
RewriteRule ^(.*)$ index.php?page=$1 [L,QSA]
RewriteRule ^/skins/pages/(.*)$ /skins/pages/?page=$1 [L,QSA]

пробуем каждую строчку расписать что она значит и что ты хочешь от неё получить. ;)

_____________
«Гнусное свойство карликовых умов приписывать
________________!свое духовное убожество другим!»
___
О) как-же он прав=>__________________ © Оноре де Бальзак.

отличный хост(рекомендую !! )
My MVC-CMV
Kapitan79
Так...

Заработать - заработало.
Осталось понять что это было...

Моё правило RewriteRule ^([A-Za-z0-9-])$?a=$1 [L] по идее тоже должно было сработать..

Если я правильно понимаю, я написал что в параметре $1 могут быть любые буквы латинского алфавита и цифры, а (.*) означает неограниченное количество любых символов. В случае со словом text это одно и то же как мне кажется... Или всегда надо писать index.php или имя другого файла, обрабатывающий данный GET запрос?

Во вторых не совсем понятно что делать когда у меня много разных параметров GET. Например у меня помимо параметра ?a= есть ещё ?id= и ?a= &b=

При попытке просто дописать RewriteRule ^(.*)$ index.php?id=$1 [L,QSA] сайт теряет всё форматирование и колбасить его начинает не по детски.

YVSIK
Цитата (Kapitan79 @ 2.01.2014 - 14:04)
Например у меня помимо параметра ?a= есть ещё ?id= и ?a= &b=

добавь ещё одно правило,
вот два правила с разными путями

Цитата
RewriteRule ^(.*)$ index.php?page=$1 [L,QSA]
RewriteRule ^/skins/pages/(.*)$ /skins/pages/?page=$1 [L,QSA]

одно правило для одной папки, другое для другой.
И ещё ЧПУ не отменяет настоящих урлов, для теста пишем настоящие, потом пишем ЧеПеУшные ,

что до твоего кода))
хМ) ты его писал, ты и разбирайся, что и как.
разбор, выше уже и показал и ниписал
каждую строчку ОБЯЗАТЕЛЬНО пропиши коментарии что даже каждый знак значит , и вАще тебе сюдЫ надА wink.gif
особенно вот оно твоЕ

_____________
«Гнусное свойство карликовых умов приписывать
________________!свое духовное убожество другим!»
___
О) как-же он прав=>__________________ © Оноре де Бальзак.

отличный хост(рекомендую !! )
My MVC-CMV
Kapitan79
Нашёл статью поподробнее на эту тему
Kapitan79
Всё получилось. Персональное спасибо YVSIK!

Что я понял в процессе:

Допустим вам нужно сделать ЧПУ для test_site.ru/?a=statii По факту необходимо заменить "?a=statii" на "statii".

Для этого используется команда RewriteRule ^(statii)$ index.php?a=$1

Как это работает.

1. Вы меняете ссылку на нужную вам страницу с test_site.ru/?a=text на test_site.ru/statii
2. когда вы нажимаете на ссылку, в файле /htaccess происходит проверка адреса ссылки на соответствие регулярному выражению, расположенному в команде RewriteRule между знаками ^ и $.
3. Как только обнаруживается совпадение, происходит 2 вещи - в адресной строке отображается "красивая" ссылка test_site.ru/statii, а странице передаётся GET запрос, расположенный справа от $. При этом $1 равно 1-вой части регулярного выражения (в данном примере она одна).
Если адрес ссылки изначально включал 2 параметра GET - test_site.ru/?a=text&b=pro_lubov - и нужно было бы получить "красивый" адрес с названием статьи test_site.ru/statii/pro_lubov, то команда выглядела бы следующим образом:
RewriteRule ^(statii)/(pro_lubov)$ index.php?a=$1&b=$2 или так RewriteRule ^(statii)/(pro_lubov)$ index.php?a=statii&b=$2

Вот как то так... Если где не прав поправьте...
YVSIK
Kapitan79
тебе осталось для полноты картины понять что значат вот эта часть кода
Цитата
[L,QSA]

как раз в этих аргументах все и дело то ИМХО

и ещё, на самом дел все это относиться К-Апачу, так сказать к настройках сервера, а так как в основном Апач и есть основной используемый сервер , вот ты ползуешь его часть.

читай про аргументы там они зовутся "флагами"
кстати сказать только-что прочитал и вполне неплохая оказалась статейка!!

_____________
«Гнусное свойство карликовых умов приписывать
________________!свое духовное убожество другим!»
___
О) как-же он прав=>__________________ © Оноре де Бальзак.

отличный хост(рекомендую !! )
My MVC-CMV
Kapitan79
Похоже проблема с .htaccess для меня не закрылась sad.gif
Суть в следующем.
Есть форма, состоящая из трёх селектов. В селектах куча option со значениями на русском языке.
Через GET всё передаётся прекрасно, однако в адресной строке отображается не кириллица, а нечто вроде %CF%F0%E8%EC%EE%F0%F1%EA%EE%E5. Понятное дело что это коды символов, но проблема в том, что .htaccess похоже их не воспринимает и правила не срабатывают.

Я покопался в гугле, но к сожалению решения не нашёл, только намёки на настройку апача, что мне как пользователю хостинга недоступно.

Подскажите верный бубен... blink.gif
DySprozin
Kapitan79
попробуй сохранить .htaccess в utf-8 (;

_____________
Господа! Я ненавижу выканье на форумах, обращайтесь ко мне на ты.
Господа! Я буду тоже тыкать, но если это так кого-то из вас коробит, пожалуйста, предупреждайте меня об этом
---
Можешь помочь — помоги, не можешь — попытайся, не хочешь — уйди.
YVSIK
Цитата (Kapitan79 @ 10.01.2014 - 22:45)
%CF%F0%E8%EC%EE%F0%F1%EA%EE%E5.

это издержки старых времен, и все в полскости браузера.
он переводит в эти символы.

как раз его заслуга это делать,
например: пишем в запросной строке

(((http://mvccmv.ru/hostinger_ru_Drupal_ftp_менеджер
и пробуем этот запрос сохранить или передать как сcылку ну например здесь на форуме,
ты и увидишь при копировании эти самые символы.
http://mvccmv.ru/hostinger_ru_Drupal_ftp_%...%B6%D0%B5%D1%80
браузер уже перевел их для себя, а тебе показал чтоб ты видел,
Вообщем попробуй погонять все это в сороке запроса, опытным путем.
ты где-то напутал, вот оно и выдает
в любом случае браузер поймет эту гремую смесь, тебе останется только к этому привыкнуть и понять на что, обращать внимания.

_____________
«Гнусное свойство карликовых умов приписывать
________________!свое духовное убожество другим!»
___
О) как-же он прав=>__________________ © Оноре де Бальзак.

отличный хост(рекомендую !! )
My MVC-CMV
Kapitan79
В конце концов я забил и написал транслит wink.gif Смысл то изначально был в организации "красивых" ЧПУ...
И никаких проблем..... cool.gif
Быстрый ответ:

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