LINUX.ORG.RU
решено ФорумAdmin

Помогите с mod_rewrite


0

1

никак не могу превратить:
http://xxx.com/category17.html?offset=30
в
http://xxx.com/index.php?categoryID=17&offset=30

Вот код:

RewriteEngine On

RewriteBase /

# category17.html?offset=30 -> index.php?categoryID=17&offset=30
RewriteRule ^category([0-9]+).html?offset=([0-9]+)$ index.php?categoryID=$1%&offset=%2  [L]
^^^^^ не работает ^^^^^

# category17.html -> index.php?categoryID=17
RewriteRule ^category(.+).html$ index.php?categoryID=$1 [L]

rewrite.log

strip per-dir prefix: /home/xxx/domains/xxx/public_html/category17.html -> category17.html
applying pattern '^category([0-9]+).html?offset=([0-9]+)$' to uri 'category17.html'
strip per-dir prefix: /home/xxx/domains/xxx/public_html/category17.html -> category17.html
applying pattern '^category(.+).html$' to uri 'category17.html'
rewrite 'category17.html' -> 'index.php?categoryID=17'
split uri=index.php?categoryID=17 -> uri=index.php, args=categoryID=17

Пробовал убирать второй RewriteRule, результат тот же.

Maclaud
() автор топика

Сдаётся мне, что тут проблема в QUERY_STRING. RewriteRule не обрабатывает ничего, что идёт после "?" в запросе. Возможно, это как-то настраивается, но мне такая возможность не известна. Если хотите передать обычный аргумент в скрипт, то вам не обязательно его рерайтить. Просто используйте

RewriteRule ^category(.+).html$ index.php?categoryID=$1 [L]
а аргумент offset получайте уже в скрипте, как любой другой ($_GET['offset']).

frozen_twilight ★★
()
Ответ на: комментарий от frozen_twilight

после:

rewrite 'category17.html' -> 'index.php?categoryID=17'
в массиве _GET нету элемента offset

вроде решил пока проблему так:

RewriteRule ^category(.+).html$ index.php?categoryID=$1&%{QUERY_STRING} [L]

в результате все работает но в конец URL, даже если QUERY_STRING пустая, дописывается «&» в конец. Чувствую что, где то нужно с RewriteCond поколдовать, но пока работает не до него.

Maclaud
() автор топика
Ответ на: комментарий от Maclaud
'qsappend|QSA' (добавлять строку запроса)
Этот флаг указывает механизму преобразований на добавление а не замену, строки запроса из URL к существующей, в строке подстановки. Используйте это когда вы хотите добавлять дополнительные данные в  строку запроса с помощью директив преобразований.

То есть, писать [L,QSA]
должно помочь

anonymous7
()

"?" не надо экранировать? В PCRE это квантификатор.

markevichus ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.