The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Создание человеческих ссылок с mod_rewrite Apache"
Вариант для распечатки  
Пред. тема | След. тема 
Форум WEB технологии (.htaccess, паролирование)
Изначальное сообщение [ Отслеживать ]

"Создание человеческих ссылок с mod_rewrite Apache"  +/
Сообщение от Meatcoins (ok) on 22-Ноя-10, 11:19 
Записываю простейшее правило в .htaccess:
RewriteEngine on
RewriteRule ^(.*)$ index.php?page=$1 [L,QSA]
Таким образом набираю "localhost/что-нибудь" и в $_REQUEST["page"] получаю адрес запрашиваемой страницы, то есть "что-нибудь".
Но недостаток этого метода в том, что абсолютно все запросы идут через index.php.
Приходится писать в index.php как-то так:
if(preg_match("{jpg}is",$page)||preg_match("{gif}is",$page)||preg_match("{png}is",$page)){
header("Content-type:".getimagesize($page));
echo file_get_contents($page);
exit();
}
if(preg_match("{css}is",$page)){
echo file_get_contents($page);
exit();
}
Это сильно нагружает сервер.
А как бы сделать, что если запрос идёт к .png .css .gif или .jpg, то мы просто выдаём картинку там где она лежит и всё.
Допустим идёт запрос "localhost/какая-то страница" - будет преобразование в "localhost/index.php?page=какая-то страница". Тут всё работает.
А если идет запрос "localhost/some_dir1/some_dir2/pics/some-pic.png" или "localhost/some_dir3/some_dir4/pics/some-pic2.png" то мы его не трогаем - пусть клиенту отдаётся реальная картинка - нам не надо передавать в качестве параметра url этого запроса в index.php.
Как это сделать?
Как правильно записать это в .htaccess?
Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Создание человеческих ссылок с mod_rewrite Apache"  +/
Сообщение от Aquarius (ok) on 22-Ноя-10, 13:13 
>[оверквотинг удален]
> или .jpg, то мы просто выдаём картинку там где она лежит
> и всё.
> Допустим идёт запрос "localhost/какая-то страница" - будет преобразование в "localhost/index.php?page=какая-то
> страница". Тут всё работает.
> А если идет запрос "localhost/some_dir1/some_dir2/pics/some-pic.png" или "localhost/some_dir3/some_dir4/pics/some-pic2.png"
> то мы его не трогаем - пусть клиенту отдаётся реальная картинка
> - нам не надо передавать в качестве параметра url этого запроса
> в index.php.
> Как это сделать?
> Как правильно записать это в .htaccess?

Заменить ^(.*)$ на что-то, чему не будет соответствовать то, для чего не нужен mod_rewrite

P.S. привет от К.О.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Создание человеческих ссылок с mod_rewrite Apache"  +/
Сообщение от Meatcoins (ok) on 22-Ноя-10, 13:34 
> Заменить ^(.*)$ на что-то, чему не будет соответствовать то, для чего не
> нужен mod_rewrite
> P.S. привет от К.О.

Не, ну это понятно.
Я хотел бы чтоб ссылки href были вида:
"localhost/что-то русскими буквами"
А ссылки типа src не обрабатывались бы mod_rewrite.
Можно сделать так:
RewriteEngine on
RewriteRule ^(.*\.php)$ index.php?page=$1 [L,QSA]
Тогда будет так:
"localhost/что-то русскими буквами.php"
Но так мне не очень нравится.

Можно ли как-то это сделать набором правил: RewriteCond - RewriteRule???

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Создание человеческих ссылок с mod_rewrite Apache"  +/
Сообщение от Aquarius (ok) on 22-Ноя-10, 13:57 
>> Заменить ^(.*)$ на что-то, чему не будет соответствовать то, для чего не
>> нужен mod_rewrite
>> P.S. привет от К.О.
> Не, ну это понятно.
> Я хотел бы чтоб ссылки href были вида:
> "localhost/что-то русскими буквами"
> А ссылки типа src не обрабатывались бы mod_rewrite.

Не, ну это понятно.

> Можно сделать так:
> RewriteEngine on
> RewriteRule ^(.*\.php)$ index.php?page=$1 [L,QSA]
> Тогда будет так:
> "localhost/что-то русскими буквами.php"
> Но так мне не очень нравится.
> Можно ли как-то это сделать набором правил: RewriteCond - RewriteRule???

ага, понятно в чем дело
^(.*)$ можно, например, заменить на что-то типа ^(.*\.[^pcgj][^nsip]e?[^gsf])$
этому выражению не будут соответствовать все URI, заканчивающиеся на .png, .css, .gif, .jpg, .jpeg и, помимо этих, на некоторые другие выражения
строго говоря, это некорректное решение, однако, осмелюсь предположить, что оно подойдет

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Создание человеческих ссылок с mod_rewrite Apache"  +/
Сообщение от Meatcoins (ok) on 22-Ноя-10, 14:38 
Понятно.
Можно и так впринципе...
Нарыл руководство по mod_rewrite http://www.egoroff.spb.ru/portfolio/apache/mod_rewrite.html
Попробую почитать, может мысли какие-то прийдут...
Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Создание человеческих ссылок с mod_rewrite Apache"  +/
Сообщение от Aquarius (ok) on 22-Ноя-10, 16:00 
> ага, понятно в чем дело
> ^(.*)$ можно, например, заменить на что-то типа ^(.*\.[^pcgj][^nsip]e?[^gsf])$
> этому выражению не будут соответствовать все URI, заканчивающиеся на .png, .css, .gif,
> .jpg, .jpeg и, помимо этих, на некоторые другие выражения
> строго говоря, это некорректное решение, однако, осмелюсь предположить, что оно подойдет

по какому принципу это (^(.*\.[^pcgj][^nsip]e?[^gsf])$) построено (в обратном порядке):
$ - конец строки
[^gsf] - последние буквы всех суффиксов, нежелательных для обработки mod_rewrite
e? - "исчезающая" буква e в .jpg/.jpeg
[^nsip] - предпоследние буквы всех суффиксов, кроме e из .jpeg, на которую работает 'e?'
[^pcgj] - предпредпоследние буквы всех суффиксов, кроме p из .jpeg, которую сдвинуло 'e?', вместо которой здесь j
\. - '.'
.* -  любое количество любых символов
^ - начало строки

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

6. "Создание человеческих ссылок с mod_rewrite Apache"  +/
Сообщение от Meatcoins (ok) on 22-Ноя-10, 16:53 
Не, регулярные выражения я знаю.
Мне просто надо написать правила, которые бы осуществляли задуманное и при этом не сильно грузили сервер. Я написал вот так:

RewriteCond %{REQUEST_FILENAME} \.jpg$|\.gif$|\.png$|\.bmp$
RewriteRule ^.*$ - [L]

RewriteCond %{REQUEST_FILENAME} ^.*$
RewriteRule ^(.*)$ index.php?page=$1 [L,QSA]

Тестирую на локальном компе. Не знаю может быть на сервере это будет и ничего, но локальный комп это грузит попосильнее, чем одно условие:
RewriteRule ^(.*\.php)$ index.php?page=$1 [L,QSA]

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "Создание человеческих ссылок с mod_rewrite Apache"  +/
Сообщение от Meatcoins (ok) on 23-Ноя-10, 09:07 
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} \.jpg$|\.gif$|\.png$|\.bmp$|\.css$
RewriteRule ^.*$ - [L]
RewriteCond %{REQUEST_FILENAME} .*
RewriteRule ^(.*)$ index.php?page=$1 [L,QSA]

Странно, в FireFox тормозит, а Eliphany нормально грузит, может быть у меня ещё и сам FireFox притормаживает... Комп не очень мощный.


Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

8. "Создание человеческих ссылок с mod_rewrite Apache"  +/
Сообщение от Макс email(??) on 11-Июл-11, 18:00 
Запиши так
RewriteEngine on
RewriteCond %{REQUEST_FILE} !-f
RewriteCond %{REQUEST_FILE} !-d
RewriteRule ^(.*)$ index.php?page=$1 [L,QSA]
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру