правило mod_rewrite - PullRequest
       3

правило mod_rewrite

1 голос
/ 19 ноября 2010

Какое правило переводит URL, как это?

host.com/plastic_toys/pink_barbie/
host.com/index.php?q=plastic+toys+pink+barbie

Количество компонентов в категории и названии продукта варьируется.

Редактировать:

Я думаю, этоrule выполняет часть работы:

RewriteRule ^([^/]*)/([^/]*)$ /index.php?q=$1+$2 [L]

Проблема с вышеприведенным правилом состоит в том, что оно не заботится о преобразовании подчеркивания в +, поэтому оно переводится следующим образом:

host.com/plastic_toys/pink_barbie/
host.com/index.php?q=plastic_toys+pink_barbie

Думаю, мне нужно делегировать это преобразование в PHP.Есть ли способ проверить, действительно ли правило выполняет преобразование так, как я себе представляю?

Ответы [ 3 ]

3 голосов
/ 19 ноября 2010

Есть ли причина (существующий код и т. Д.), Что вам нужно сделать это полностью как переписать?

Обычно я делаю

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

и затем анализирую $_GET["q"]даже просто разобрать $_SERVER["REQUEST_URI"] напрямую.preg_match() ваш друг здесь.

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

1 голос
/ 19 ноября 2010

Во-первых - я бы предложил использовать следующие правила:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z_]+)/([a-zA-Z_]+)/?$ /index.php?q1=$1&q2=$2 [L,QSA]

RewriteCond каждый проверяет, что действительный файл или каталог не существует (например, если вы хотите иметь статический /help.html ион существует, или /FAQ/index.php, и он существует, тогда RewriteRule не будет запускаться.

Я разделил параметры на 2 элемента - так что вы можете рассматривать их как отдельные параметры (если вы хотитерассматривайте его как 1 параметр, просто измените его на /index.php?q=$1-$2 или какой-либо другой разделитель, который вы хотите - я бы сказал, не используйте +, поскольку вы все равно хотите разобрать этот символ).

0 голосов
/ 19 ноября 2010

Ничего.Как правило знает, где провести черту между категорией и продуктом.Что делать, если запрос имеет 3 параметра.Являются ли первые две категории и последние товаром или являются первыми категорией и последние два товара.

...