Не могу настроить mod_rewrite...

Дмитрий
На сайте с 21.06.2003
Offline
52
759

Многое тут прочитал, и примеры нашел, но к своему сайту приминить не получается.

нужно убрать символ ? из адреса.

ссылки выглядят так:

сначала:

http://www.site.ru/index.php

потом раздел меню номер 1:

http://www.site.ru/index.php?op=cat&sec=1

потом из раздела меню номер 1 берем товар номер 5:

http://www.site.ru/index.php?op=cat&sec=1&gn=5

насколько я понял после преобразования должно получиться:

http://www.site.ru/index/op/cat/sec/1/gn/5 или нет?

и для последней строки я пишу в .htaccess нечто такое:

RewriteRule ^(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)$ $1.php?$2=$3&$4=$5&$6=$7 [L]

в адресной строке изменений никаких не вижу.

по-моему я и RewriteRule не правильно пишу, и еще что то надо делать.

Надо ли все скрипты исправлять (движок сайта)?

Спасибо.

[Удален]
#1
в адресной строке изменений никаких не вижу.

Логично, но теперь вы можете запрашивать http://www.site.ru/index/op/cat/sec/1/gn/5 и получите то, что лежит по адресу http://www.site.ru/index.php?op=cat&sec=1&gn=5. Именно это и делает mod_rewrite.

Надо ли все скрипты исправлять (движок сайта)?

Да, надо исправить все ссылки - чтобы они вели на уже преобразованные адреса.

Вообще, я бы посоветовал так преобразовывать:


DirectoryIndex index.php
RewriteBase /
RewriteEngine On
RewriteRule ^(\d+).html$ index.php?op=cat&sec=$1 [L]
RewriteRule ^(\d+)-(\d+).html$ index.php?op=cat&sec=$1&gn=$2 [L]
Дмитрий
На сайте с 21.06.2003
Offline
52
#2
Как писал Interitus
Вообще, я бы посоветовал так преобразовывать:

DirectoryIndex index.php
RewriteBase /
RewriteEngine On
RewriteRule ^(\d+).html$ index.php?op=cat&sec=$1 [L]
RewriteRule ^(\d+)-(\d+).html$ index.php?op=cat&sec=$1&gn=$2 [L]

написал как предложено вами.

теперь на вызов адреса

http://www.site.ru/index/op/cat/sec/1/gn/5

выходит что документ не найдет.

А что это за .html в коде? У меня нет документов с таким расширением.

[Удален]
#3
Как писал Дмитрий
написал как предложено вами.
теперь на вызов адреса
http://www.site.ru/index/op/cat/sec/1/gn/5

выходит что документ не найдет.

А что это за .html в коде? У меня нет документов с таким расширением.

Все верно - если делать так, как написал я, то надо запрашивать соответственно:

http://www.site.ru/ - индексная страница,

http://www.site.ru/1.html - раздел меню №1,

http://www.site.ru/1-5.html - раздел №1, товар №5.

Просто такие имена на мой взгляд более эстетичные.

Регулярное выражение, которое в вашем первом сообщении тоже работать будет, просто уж очень похоже на эффект LTS. :)

Дмитрий
На сайте с 21.06.2003
Offline
52
#4

Interitus, я вас очень прошу проявить немного терпения... :)

пишу http://www.site.ru/1.html - файл не найден

и еще я не понимаю откуда возьмутся значения $1 и $2 для подстановки в

RewriteRule ^(\d+).html$ index.php?op=cat&sec=$1&gn=$2

а решение которое я написал в первом посте работает только для выбора товара номер 5 из раздела 1. А для того что бы посмотреть сам раздел 1 оно не срабатывает.

[Удален]
#5
и еще я не понимаю откуда возьмутся значения $1 и $2 для подстановки в
RewriteRule ^(\d+).html$ index.php?op=cat&sec=$1&gn=$2

В моем посте не было такой строчки. :)

а решение которое я написал в первом посте работает только для выбора товара номер 5 из раздела 1. А для того что бы посмотреть сам раздел 1 оно не срабатывает.

Логично. Надо делать две строки, для двух типов запрашиваемых страниц.

Дмитрий
На сайте с 21.06.2003
Offline
52
#6

да, это я ее я ее "перефразировал"...

имелась ввиду строка

RewriteRule ^(\d+)-(\d+).html$ index.php?op=cat&sec=$1&gn=$2 [L]

а про "логично", я понимаю что логично.

я и пробовал написать 2 строки (первая для раздела, вторая для товара в этом разделе):

RewriteEngine On

RewriteBase /

RewriteRule ^(.*)/(.*)/(.*)/(.*)/(.*)$ $1.php?$2=$3&$4=$5 [L]

RewriteRule ^(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/(.*)$ $1.php?$2=$3&$4=$5&$6=$7 [L]

но работает только вторая.

а почему не вызывается http://www.site.ru/1.html

с использованием вашего совета?

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