Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Apache

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: mod_rewrite, помогите сделать
 
 автор: zavragnov   (30.10.2005 в 13:56)   письмо автору
 
 

Вот есть ссылки такового вида


http://test1.ru/showstat.php?selfile=hosting


хочу сделать ссылки вида


http://test1.ru/hosting.php



но точто я сделал не работает

вот .htaccess



RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteRule ^/([a-z])$ /showstat.php?selfile=$1

   
 
 автор: glsv (Дизайнер)   (01.11.2005 в 23:16)   письмо автору
 
   для: zavragnov   (30.10.2005 в 13:56)
 

А не хотите вот так сделать?

RewriteEngine on 
Options +FollowSymlinks 
RewriteBase / 
RewriteRule ^([^/]*)\.html$ /showstat.php.php?selfile=$1

Не существующие страницы обозначать расширением .html, а существующие php. Тогда можно составить простое, однозначно-работающее, правило. Иначе трудно отделить реальную страницу от "нереальной".

http://test1.ru/hosting.html

Преобразовывается в

http://test1.ru/showstat.php?selfile=hosting 

   
 
 автор: zavragnov   (20.11.2005 в 14:17)   письмо автору
 
   для: glsv (Дизайнер)   (01.11.2005 в 23:16)
 

А как такое превратить в нормальный вид


http://www.test1.ru/showportfolio.php?razdel=foto&msg=%3Cp%3E%CE%EA%F3%EF%E0%ED%F2%FB%3C%2Fp%3E&cont=muravey.jpg&ohter=%CE%EA%F3%EF%E0%ED%F2%FB%0D%0A


например чтобы это выглядело примерно так


http://www.test1.ru/foto/muravey.jpg/page.html



Вот я тут понаписал но это не работает


RewriteEngine on 
Options +FollowSymlinks 
RewriteBase / 
RewriteRule ^([^/]*)\.html$ /showstat.php?selfile=$1
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)\.html$ /showportfolio.php?razdel=$1&msg=$2&cont=$3&ohter=$4

   
 
 автор: goddamn   (20.11.2005 в 20:43)   письмо автору
 
   для: zavragnov   (20.11.2005 в 14:17)
 

RTFM http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html.en#rewriterule
"Query String_
The Pattern will not match against the query string. Instead, you must use a RewriteCond with the %{QUERY_STRING} variable. [blablabla]. When you want to erase an existing query string, end the substitution string with just the question mark. "

используй RewriteCond

RewriteEngine on 
Options +FollowSymlinks 
RewriteBase /
RewriteCond %{QUERY_STRING} ^razdel=(.+)&msg=(.+)&cont=(.+)&ohter=(.+)$
RewriteRule ([^/]+)/([^/]+)/([^/]+)/([^/]+)\.html$ /showportfolio.php?razdel=$1&msg=$2&cont=$3&ohter=$4

   
 
 автор: zavragnov   (21.11.2005 в 19:16)   письмо автору
 
   для: goddamn   (20.11.2005 в 20:43)
 

Я в английском не силен, но все равно спасибо за ссылку.

Вот такой вопрос, а каже дудет выглядет url, что то я не как не пойму как вызвать эти страницы

>
RewriteEngine on 
>Options +FollowSymlinks 
>RewriteBase /
>RewriteCond %{QUERY_STRING}
>^razdel=(.+)&msg=(.+)&cont=(.+)&ohter=(.+)$
>RewriteRule ([^/]+)/([^/]+)/([^/]+)/([^/]+).html$
>/showportfolio.php?razdel=$1&msg=$2&cont=$3&ohter=$4

   
 
 автор: goddamn   (21.11.2005 в 21:05)   письмо автору
 
   для: zavragnov   (21.11.2005 в 19:16)
 

не понятен вопрос ?! ...

RewriteCond %{QUERY_STRING} ^razdel=(.+)&msg=(.+)&cont=(.+)&ohter=(.+)$

означает, что если строка запроса (это то,что после ?) равна razdel=любойтекст&amp=любойтекст и т.д. ... , то сработает правило RewriteRule ([^/]+)/([^/]+)/([^/]+)/([^/]+).html$ /showportfolio.php?razdel=$1&msg=$2&cont=$3&ohter=$4
тобишь каждый набор в скобках будет подставлен в $1 $2 $3 и $4 соответственно ...
в адресной строке будет написано "красиво" :), а страница загрузится та, что нужна, т.е. со всеми этими параметрами ...

примерно ясно ?

   
 
 автор: Alex14   (23.11.2005 в 13:04)   письмо автору
 
   для: zavragnov   (30.10.2005 в 13:56)
 

А как сделать обратное преобразование типа
 http://site.ru/art.php?p=file  --->  http://another_site.ru/art/file.html 

Чтобы при переходе от динамических адресов к статическим старые ссылки не пропадали, а постепенно заменялись статическими.

В корневой директории site.ru пишу так:
 RewriteRule ^([a-z]+)\.php\?p=([a-z]+)$ http://another_site.ru/$1/$2\.html 

Вообще не переходит на другой сайт, т.е. как будто совпадения с шаблоном нет

А если убираю слеш перед '?' и вместо знака равенства '=' пишу вопрос '?', то переход есть, но выдаёт вот что:
 http://another_site.ru/art/p.html?p=file 

т.е не то, что надо.

   
 
 автор: goddamn   (23.11.2005 в 13:43)   письмо автору
 
   для: Alex14   (23.11.2005 в 13:04)
 

об же этом несколькими постами выше было сказано ?!
просто RewriteRule ^([a-z]+)\.php\?p=([a-z]+)$ не будет работать, см. выше на 3 поста
и если тебе надо, чтоб ПЕРЕХОДИЛ на другой сайт, то нужно использовать еще флаг [R].
http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html.en#rewriterule

   
 
 автор: Alex14   (25.11.2005 в 13:36)   письмо автору
 
   для: goddamn   (23.11.2005 в 13:43)
 

Ну и где в той ссылке сказано, КАК это сделать?
Кому интересно, решение такое:

RewriteCond %{QUERY_STRING} ^p=(.+)
RewriteRule ^([^/]+)\.php http://another_site.ru/$1/%1.html? 

Преобразует http://site.ru/dir.php?p=page ---> http://another_site.ru/dir/page.html
Кстати, переход есть, что с флагом [R], что без него.

   
 
 автор: glsv (Дизайнер)   (25.11.2005 в 20:50)   письмо автору
 
   для: Alex14   (25.11.2005 в 13:36)
 

>Кому интересно, решение такое:
>Преобразует http://site.ru/dir.php?p=page ---> http://another_site.ru/dir/page.html
А для чего можно применить такое преобразование?
Обычно делают наоборот - чтобы сделать "красивые" URL?

>Кстати, переход есть, что с флагом [R], что без него.
Флаг [R] приводит к внешнему редиректу. Т.е. браузеру посылает заголовок, что необходимо сделать редирект по новому адресу. Если флаг [R] отсутствует, то apache сам подставляет другую страницу, не сообщая об этом браузеру.

   
 
 автор: Alex14   (25.11.2005 в 21:59)   письмо автору
 
   для: glsv (Дизайнер)   (25.11.2005 в 20:50)
 

>А для чего можно применить такое преобразование?
>Обычно делают наоборот - чтобы сделать "красивые"
>URL?
Для того, чтобы при переходе от динамических адресов страниц к статическим (которые генерируются тоже динамически, но имеют уже статический вид), первые ПОСТЕПЕННО замещались вторыми. Например, чтобы при переходе из закладки браузера или из поисковых систем не возникало ошибки 404. Т.е. такой переход к "красивым" адресам от "некрасивых" осуществляется почти незаметно.

   
 
 автор: glsv (Дизайнер)   (25.11.2005 в 23:06)   письмо автору
 
   для: Alex14   (25.11.2005 в 21:59)
 

А ошибки 404, как правило, не возникает. Ведь страница index.php реально существует и, соответственно, все обращения к ней остаются действительны.

   
 
 автор: Alex14   (26.11.2005 в 21:14)   письмо автору
 
   для: glsv (Дизайнер)   (25.11.2005 в 23:06)
 

>А ошибки 404, как правило, не возникает. Ведь страница
>index.php реально существует и, соответственно, все
>обращения к ней остаются действительны.
Во-первых, у меня сайт на другой домен переезжает, во-вторых, я заменил несколько шаблонных файлов на один (index.php) и изменил число параметров в QUERY_STRING. Поэтому ошибка будет. А в-третьих, если такое преобразование не сделать, то "некрасивые" ссылки не заменятся "красивыми", которые поисковые системы любят больше.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования