Нужна помощь в изменении регулярных выражений - PullRequest
1 голос
/ 05 февраля 2012

npinti помог мне создать регулярное выражение для удаления строки запроса и сопоставления оставшихся сегментов из URL /seattle/restaurant/sushi?page=2: «Примерно так должно получиться 3 группы: /(.*?)/(restaurant)/([^?]+).*. Группа 1 является местом расположения, группа 2быть рестораном, а группа 3 - суши. Если после последнего / есть?, регулярное выражение отбрасывает? и все, что следует. "

Я попытался изменить вышеприведенное, чтобы сделать тот же трюк с URL /seattle/restaurant?page=2 но я не мог понять это правильно.Я не знаю, будет ли строка запроса af или нет, или параметры строки запроса.Так что мне нужна гибкость из регулярного выражения, которое будет соответствовать и отбрасывать?и все, что следуетЯ надеюсь, что кто-то может помочь.

Спасибо

Томас

Ответы [ 2 ]

1 голос
/ 05 февраля 2012

Ваши rewriterules могут выглядеть так:

RewriteRule /([^/]+)/restaurant/([^/]+)$ mynewpage.php?group1=$1&group2=$2 [QSA,NC,L]

Вы можете искать значения QSA, NC и L благодаря ссылкам, которые я предоставляю ниже.


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


  • Вот вики serverfault.com
  • Официальное руководство htaccess по
  • Официальное руководство по mod_rewrite

А если этого недостаточно:

Два совета:

Если вы не в размещенной среде (= если это ваш собственный сервер и , вы можете изменить виртуальные хосты (не только файлы .htaccess), попробуйте использовать директиву RewriteLog: она поможет вам отследить такие проблемы:

# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On

Мой любимый инструмент для проверки регулярных выражений:

http://www.quanetic.com/Regex (не забудьте выбрать ereg (POSIX) вместо preg (PCRE)!)

0 голосов
/ 05 февраля 2012

Это должно позволить вам сопоставить весь текст до ? и ничего больше.Он будет соответствовать всему, если нет ?:

[^?]*

Это все, что вам нужно сделать?Потому что /(.*?)/(restaurant)/([^?]+).*. похоже, что оно предназначено для выполнения чего-то значительно более сложного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...