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

Форум Apache

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

 

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

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

тема: mod_rewrite Элементарно?
 
 автор: Max7   (05.09.2005 в 11:12)   письмо автору
 
 

Ан нет...испробовал все знающие методы, причем задача элементарная!
Знаю я по mod_rewrite не много, вероятно поэтому что-то упускаю. После долгих мучений один на один с этой задачей прошу помочь мне.

http://www.php.com/directory/index.php?cat1=computers-2005&cat2=programming2-php
перевожу в красивый вид
http://www.php.com/directory/computers-2005/programming2-php.html

В папку directory ложу .htaccess со следующим содержание:
RewriteEngine on
RewriteBase /directory/

RewriteRule ^(.*)/$ index.php?cat1=$1
RewriteRule ^(.*)/(.*).html$ index.php?cat=$1&cat2=$2

Все работает!
НО, не отрабатывает когда нет в конце слеша: http://www.php.com/directory/computers-2005
Со слешом все работает.

Какие могут быть пути решения? Как побороть?

   
 
 автор: glsv (Дизайнер)   (06.09.2005 в 06:06)   письмо автору
 
   для: Max7   (05.09.2005 в 11:12)
 

Попробуйте вот этот вариант

RewriteRule ^(.*)/(.*)\.html$ index.php?cat=$1&cat2=$2
RewriteRule ^([^/]*)/$ index.php?cat1=$1 
RewriteRule ^([^/.]*)$ index.php?cat1=$1

   
 
 автор: Max7   (06.09.2005 в 08:40)   письмо автору
 
   для: glsv (Дизайнер)   (06.09.2005 в 06:06)
 

Ну ты и гений! Спасибо! Я много форумов перерыл, нигде не смогли помочь.

Для поисковиков такой вариат правильнее будет? Как реагируют поисковики на такой редирект?
RewriteRule ^(.*)/(.*)\.html$ index.php?cat1=$1&cat2=$2
RewriteRule ^([^/]*)/$ index.php?cat1=$1
RewriteRule ^([^/.]*)$ $1/ [R]

   
 
 автор: glsv (Дизайнер)   (08.09.2005 в 05:28)   письмо автору
 
   для: Max7   (06.09.2005 в 08:40)
 


RewriteRule ^([^/.]*)$ $1/ [R]

Я думаю, что им будет все равно. Они даже разницы не заметят.
Ведь такой запрос все равно неявно выполняется если нет слеша.

   
 
 автор: Akira   (09.09.2005 в 01:29)   письмо автору
 
   для: glsv (Дизайнер)   (08.09.2005 в 05:28)
 

НЕ разу не работал с модом. Прошо помочь :)
От установки до разбития.
Пример url:
http://phpcom.ru/index.php?a=1&b=2&c=3
в
http://phpcom.ru/1/2/3
Надеюсь на помощь :))

   
 
 автор: glsv (Дизайнер)   (10.09.2005 в 06:24)   письмо автору
 
   для: Akira   (09.09.2005 в 01:29)
 

[code]
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/*$ index.php?a=$1&b=$2&c=$3
[code]
При запросе URL
http://phpcom.ru/1/2/3
Реально будет произведено обращение к
http://phpcom.ru/index.php?a=1&b=2&c=3

   
 
 автор: Akira   (11.09.2005 в 03:30)   письмо автору
 
   для: glsv (Дизайнер)   (10.09.2005 в 06:24)
 


RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/*$ index.php?a=$1&b=$2&c=$3

Options +FollowSymlinks - что это обозначает?
Я понял, что работа идет с рег. выражениями? Ищет совпадения аля preg_replace?

   
 
 автор: glsv (Дизайнер)   (11.09.2005 в 05:40)   письмо автору
 
   для: Akira   (11.09.2005 в 03:30)
 

Options +FollowSymlinks включает символические ссылки. Она обязательно должна быть включена для преобразования URL.

>Я понял, что работа идет с рег. выражениями? Ищет совпадения аля preg_replace?
В основном, да.

   
 
 автор: Max7   (10.09.2005 в 22:17)   письмо автору
 
   для: glsv (Дизайнер)   (08.09.2005 в 05:28)
 

Дизайнер, я не могу добиться идеального mod_rewrite-а.
----
Вот 1 код:
RewriteEngine on
RewriteBase /directory/

RewriteRule ^(.*)/(.*)\.html$ index.php?cat1=$1&cat=$2
RewriteRule ^([^/]*)/$ index.php?cat1=$1
RewriteRule ^([^/.]*)$ $1/ [R]
При таком коде все хорошо работает, но когда запрашиваешь http://www.php.com/directory/ , то он редиректит на http://www.php.com/
----

----
Вот 2 код:
RewriteEngine on
RewriteBase /directory/

RewriteRule ^(.*)/(.*)\.html$ index.php?cat1=$1&cat=$2
RewriteRule ^([^/]*)/$ index.php?cat1=$1
RewriteRule ^([^/.]*)$ index.php?cat1=$1
При таком коде тоже все хорошо работает, но когда запрашиваешь http://www.php.com/directory/ , то cat1 = "". А у меня в directory индексная страница index.html и хотелось бы, чтобы она выдавалась. index.html приоритнее чем index.php
----

Идеальнее лучше 1 код. Возможно то, что я хочу? Как это сделать?

   
 
 автор: glsv (Дизайнер)   (11.09.2005 в 05:40)   письмо автору
 
   для: Max7   (10.09.2005 в 22:17)
 

Хм… так у нас же вообще неправильное рег. выражение. Там одна директория упущено.
Посмотрите вот этот код.

RewriteRule ^([^/]+)/([^/]+)$ index.php?cat1=$2
RewriteRule ^([^/]+)/([^/]+)/$ index.php?cat1=$2
RewriteRule ^([^/]+)/([^/]+)/([^/]+)\.html$ index.php?cat1=$2&cat2=$3

   
 
 автор: Max7   (11.09.2005 в 15:51)   письмо автору
 
   для: glsv (Дизайнер)   (11.09.2005 в 05:40)
 

Нет...нет....htaccess я ложу в папку directory и задаю RewriteBase /directory/

   
 
 автор: Max7   (13.09.2005 в 07:54)   письмо автору
 
   для: glsv (Дизайнер)   (11.09.2005 в 05:40)
 


RewriteRule ^([^/]+)/([^/]+)$ index.php?cat1=$2
RewriteRule ^([^/]+)/([^/]+)/$ index.php?cat1=$2
RewriteRule ^([^/]+)/([^/]+)/([^/]+).html$
index.php?cat1=$2&cat2=$3

Данный код вообще не отрабатывает, если даже помещаешь его в главную директорию.

   
 
 автор: glsv (Дизайнер)   (15.09.2005 в 06:15)   письмо автору
 
   для: Max7   (13.09.2005 в 07:54)
 

-

   
 
 автор: V!rus   (17.09.2005 в 14:56)   письмо автору
 
   для: glsv (Дизайнер)   (15.09.2005 в 06:15)
 

А как написать, что бы вместо http://site.com/index.php?id=1
было http://site.com/1.html???
У меня в .htaccess

RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteRule ^([^/.]*)$ index.php?id=$1

И все работает, т.е вместо http://site.com/index.php?id=1
получается http://site.com/1
Но мне нужно http://site.com/1.html
что еще нужно добавить?

   
 
 автор: glsv (Дизайнер)   (15.09.2005 в 06:25)   письмо автору
 
   для: Max7   (13.09.2005 в 07:54)
 


DirectoryIndex index.html index.php
RewriteEngine on
Options FollowSymlinks
RewriteBase /
RewriteRule ^(.*)/(.*)\.html$ index.php?cat1=$1&cat=$2
RewriteRule ^([^/]+)/$ index.php?cat1=$1
RewriteRule ^([^/]+)$ index.php?cat1=$1

Поместил в подпапку и проверил работу вариантов:
http://test/dir/ - открывается index.html

http://test/dir/2
http://test/dir/2/
http://test/dir/2/3.html
Это перебрасывает на dir/index.php с передачей параметров.

   
 
 автор: Max7   (15.09.2005 в 18:01)   письмо автору
 
   для: glsv (Дизайнер)   (15.09.2005 в 06:25)
 

Спасибо! Работает.

   
 
 автор: Akira   (20.10.2005 в 00:40)   письмо автору
 
   для: Max7   (15.09.2005 в 18:01)
 

А как сделать, в каких папка не надо выполнять rewrite?

   
 
 автор: glsv (Дизайнер)   (22.10.2005 в 05:47)   письмо автору
 
   для: Akira   (20.10.2005 в 00:40)
 

Мне видится 2 варианта

1. Поместить файлы htaccess только в те директории, где они должны выполняьтся.
2. Установить соответствующие правила RewriteRule, в которых бы прямо указывались директории, например

RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteRule ^dir1/(.*)$ /newdir/index.php?$1 
RewriteRule ^dir2/(.*)$ /newdir/index.php?$1
RewriteRule ^dir3/(.*)$ /newdir/index.php?$1

Здесь преобразования выполняются, только если производится обращение к директориям
dir1, dir2, dir3

   
Rambler's Top100
вверх

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