Rewrite для динамических страниц

12 3
C
На сайте с 08.11.2004
Offline
6
1615

Подскажите, пожалуйста, новичку как сделать следующую вешь в htaccess:

есть сайт (скрипт), нечто вроде classifieds, в котором новые страницы генерируютсются след.образом http://www.domain.com/info.php?id=1, http://www.domain.com/info.php?id=48 ну и так далее, по возрастающей. Как привести адреса этих станиц, например, к виду www.domain.com/listing1.html ? Поскольку новые страницы добавляются/удаляются постоянно, как правильно написать общий Rewrite для всех страниц?

Вот так не работает:

RewriteRule ^listing-([0-9]*).html info.php?id=$1

Вот, еще нашла , как генерируются адреса страниц в каталоге :

$ListingTable .= "<tr onMouseOver=\"this.style.background='#E2E2E2'; this.style.cursor='hand'\" onMouseOut=\"this.style.background='white'\" onClick=\"window.open('info.php?id=$a1[ListingID]', '_top')\">\n\t";

Как правильно изменить 'info.php?id=$a1[ListingID]' на "правильный адрес", чтобы в каталоге генерировались ссылки вида www.domain.com/listing1.html, а не http://www.domain.com/info.php?id=1, как сейчас?

Плиииз....

Коля Дубр
На сайте с 02.03.2005
Offline
153
#1

1. .htaccess такого содержания работает:

RewriteEngine on

RewriteBase /

RewriteRule ^listing-([0-9]*).html$ index.php?id=$1

Обратите внимание на конечный якорь ($) в регэкспе. Вообще регэкспы у этого модуля какие-то достаточно глючные, обычно если что-то не работает - не работает шаблон.

2. Не совсем понял. Просто берете и заменяете window.open('info.php?id=$a1[ListingID] на window.open('listing-$a1[ListingID].html

PS. А по моему топику про мод реврайт совсем никто ничего не знает? :(

Разрабатываю общую шину (http://habrahabr.ru/company/floxim/blog/268467/) помаленьку. ...а еще у меня есть бложек (http://www.blogovo.ru/).
C
На сайте с 08.11.2004
Offline
6
#2

Коля Дубр

Спасибо огромное!

Про якорь-то я и забыла...

поэтому и заменить window.open('info.php?id=$a1[ListingID] на window.open('listing-$a1[ListingID].html не получалось - не работала конструкция.

DO
На сайте с 01.09.2005
Offline
120
#3

А как быть, если число параметров GET-запроса непостоянное? То есть некоторые значения необязательны, а некоторые могут повторяться (например при submit нескольких checkbox с одинаковым именем или пунктов списка с множественным выделением)?

Коля Дубр
На сайте с 02.03.2005
Offline
153
#4

D.O., а шут его знает =) Честно говоря, просто не приходилось сталкиваться. Наверно можно написать более хитрое регулярное выражение. А можно просто несколько правил задать.

DO
На сайте с 01.09.2005
Offline
120
#5
Коля Дубр:
D.O., а шут его знает =) Честно говоря, просто не приходилось сталкиваться. Наверно можно написать более хитрое регулярное выражение. А можно просто несколько правил задать.

Я пробовал 2 правила вместо одного:

RewriteRule ^page1/q-(.*)$ cgi-bin/page1.pl?q=$1

RewriteRule ^/what-(.*)$ &what=$1

Для запроса вида

http://localhost/page1/q-str/what-1

чтобы превратить его в

http://localhost/cgi-bin/page1.pl?q=str?what=1

Не работает. Где тут ошибка?

L
На сайте с 18.03.2004
Offline
48
#6

Ну, именно в этом - во втором знаке вопроса вместо амперсанда... ;-) http://localhost/cgi-bin/page1.pl?q=str?what=1

И вообще-то, у вас тут два отдельных правила. Такое, кажется, и не сработает.

Думаю: [||||||||iiiiiiiii] 57% completed. Цитаты из фантастики и фэнтези (http://www.fancit.ru). Отвлекись, вспомни, что интересного прочёл. Или найди что нового почитать!
DO
На сайте с 01.09.2005
Offline
120
#7
Lexx:
Ну, именно в этом - во втором знаке вопроса вместо амперсанда... ;-) http://localhost/cgi-bin/page1.pl?q=str?what=1

Просто опечатка при наборе сообщения.

Lexx:
И вообще-то, у вас тут два отдельных правила. Такое, кажется, и не сработает.

То есть, проблема с переменным числом параметров неразрешима?

Nik33
На сайте с 04.08.2005
Offline
58
#8

D.O., да уж.. Ваши мытарства не знают предела, а советы советчиков не блещут.. (((

потратил 5 минут на поисковик.. вот решение:

http://forum.sources.ru/index.php?showtopic=62609&st=15

найдено по запросу "Rewrite 2 параметра" в гугле (выдача "Я" меня что-то перестала вдохновлять на поиск в нем..)

P.S. обязательно почитай доку ссылка на которую есть в том форуме, очень познавательно, хоть и на английском..

Выбор уже сделан! Тебе осталось принять его..
DO
На сайте с 01.09.2005
Offline
120
#9

Я пока опробовал такое решение и пока остановился на нём:

Текст .htaccess:

============

RewriteEngine On

Options +FollowSymLinks

RewriteBase /

RewriteRule ^([^/]*)/(.*)$ cgi-bin/sub/$1.pl?$2

============

В этом случае при вызове

http://localhost/script2/p1-v1/p2-v2

будет вызываться

http://localhost/cgi-bin/sub/script2.pl?p1-v1/p2-v2

Здесь "script2" может быть любым, главное чтобы имя совпадало с именем существующего скрипта с суффиксом ".pl".

Строка "p1-v1/p2-v2" будет доступна в переменной $ENV{QUERY_STRING}.

Из неё и доставать значения параметров (пары разделяются "/" вместо "&", а параметры и значения разделяются "-" вместо "=").

Число и порядок параметров могут быть любые (для обработки параметров), но порядок лучше соблюдать единый (для поисковиков).

Скрипты можно будет вызывать и по старым путям, и по новым.

tyumile
На сайте с 27.07.2005
Offline
138
#10

Подскажите.

Первый раз переписываю mod-rewrite. Вроде всё сделал, куча примеров, написал:


RewriteEngine on
RewriteBase /
RewriteRule ^cid-([0-9]*).html$ ?cid=$1

страница вида www.111.ru/kolobok/?cid=23

Не работает, а в чём ошибка не пойму... Пока плохо знаю про это.

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий