2013-09-11 2 views
1

Я ищу способ предоставления дружественного URL-адреса, когда пользователи просматривают мой сайт. В настоящее время у меня есть полуфункциональный вариант, однако он будет работать только с одним поисковым термином. Я хотел бы иметь возможность добавлять как можно больше поисковых запросов.дружественный mod_rewrite для поиска URL с несколькими терминами

Я URL-адрес устанавливается следующим образом:

http://www.mydomain.com/tutorial/usersearch=word/sort=1

со следующим Regex в .htaccess:

# Rewrite rule for the tutorial 'page selection' links 
RewriteRule ^tutorial/page([0-9]+)$ tutorial.php?page=$1 
RewriteRule ^tutorial/page([0-9]+)/usersearch=([A-Za-z_%20+-]+)$ tutorial.php?page=$1&usersearch=$2 
RewriteRule ^tutorial/page([0-9]+)/usersearch=([A-Za-z_%20+-]+)/sort=([0-9]+)$ tutorial.php?page=$1&usersearch=$2&sort=$3 
RewriteRule ^tutorial/usersearch=([A-Za-z_-]+)(/sort=([0-9]+))?$ tutorial.php?usersearch=$1&$2 

Последняя строка кода выше относится к дружественному поиска URL Я пытаюсь создать. Параметр/sort = integer также является необязательным. При вводе поискового запроса и нажатии кнопки отправки добавляется к недружественному URL-адресу '& submit = Поиск', поэтому я не знаю, следует ли это учитывать и в качестве опции?

Вышеописанное .htaccess regex работает, но только с одним поисковым термином.

'http://www.mydomain.com/tutorial/usersearch=word/sort=3' - это работает, однако, как только вы добавляете пробел после слова, URL-адрес терпит неудачу, и вы получаете ошибку 404. Я попытался добавить() ?, (% 20)? для дополнительных пространств, но он даже не работает. Я попытался добавить пространство внутри первого класса символов, но это полностью не удается.

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

спасибо, что вам помогли.

ответ

1

Ваше регулярное выражение неверно для соответствующих пространств:

[A-Za-z_-] 

будет соответствовать только верхний/нижний регистр ASCII буквы подчеркивания и дефиса.

Измените ваше правило, любят, чтобы захватить пространства, а также:

RewriteRule ^tutorial/usersearch=([^/]+)(?:/(sort=[0-9]+))?$ index.php?usersearch=$1&$2 [L,QSA,NC] 
+0

Я добавил, что в качестве последней строки кода, и это работает удовольствие! Я не знаю, какая часть соответствует пробелу в URL-адресе? вы могли бы просветить меня? Кроме того, я скорректировал свое регулярное выражение с вашим примером и сумел сжать 4 строки кода в одну из групп (?: Non captureing и т. Д., Так что спасибо! Например: 'RewriteRule^tutorial (?:/(страница) ([0-9] +))? (?:/(usersearch =) ([^ /] +))? (?:/(sort = [0-9] +))? $ tutorial.php ? $ 1 = $ 2 & $ 3 $ 4 & $ 5 [L, QSA, NC] ' –

+0

Мое регулярное выражение:' [^ /] + 'также фиксирует пробел, в основном это означает совпадение до соответствия'/'. – anubhava

Смежные вопросы