Как написать выражение, чтобы захватить все после выражения, а затем переписать в htaccess - PullRequest
3 голосов
/ 13 мая 2019

Я новичок в переписывании URL и регулярных выражений в целом. Я пытаюсь переписать URL, чтобы сделать его "красивым URL" Исходный URL был

/localhost/house/category.php?cat=lounge&page=1

Я хочу, чтобы новый URL выглядел так:

/localhost/house/category?lounge&page=1

(как я уже сказал, я новичок, поэтому сейчас не зацикливаюсь на этом)

Самое близкое, что мне удалось получить, это:

RewriteRule ^category/(.*)$ ./category.php?cat=$1 [NC,L]

, но копирует весь URL и создает:

/localhost/house/category/house/category/lounge&page=1

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

Ответы [ 2 ]

1 голос
/ 13 мая 2019

Спасибо за все ваши предложения, я вернул его к этой

RewriteRule категории / ([^ /] ) / ([0-9] ) /? $ Category.php? cat = $ 1 & page = $ 2 [NC, L]

, который сделал трюк, и я пока оставлю это здесь.

1 голос
/ 13 мая 2019

Я постараюсь вам помочь:

  1. Возможно, у вас уже есть, но попробуйте генератор перезаписи мод и htaccess tester .
  2. С этот ответ : Запрос (все после?) Не является частью пути URL и не может быть пропущен или обработан директивой RewriteRule без использования [QSA].
  3. Я предлагаю использовать RewriteCond и , используя% 1 вместо $ 1 для совпадений строки запроса вместо того, чтобы делать все это в RewriteRule.

Для вашего решения попробуйте:

RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^house/category$ house/category.php?cat=%1 [NC,L]

Это вставит .php и cat= при сохранении &page=


В ожидании вашего следующего шага, приведенная ниже модификация мода может помочь начать конвертацию

http://localhost/house/category/lounge/1

до

http://localhost/house/category.php?cat=lounge&page=1

Здесь требуется только RewriteRule, без строки запроса:

RewriteRule ^house/category/([^/]*)/([0-9]*)/?$ house/category.php?cat=$1&page=$2 [NC,L]

Используйте regex101 для получения дополнительной помощи и подробного описания того, что делают эти регулярные выражения.


Если это все еще не работает, продолжайте делать регулярное выражение более мягким, пока оно не будет соответствовать правильно:

Попробуйте удалить ^ в RewriteRule, чтобы он стал

RewriteRule category$ category.php?cat=%1 [NC,L]

Тогда она будет соответствовать этой странице на любом уровне каталога. Затем добавьте обратно house/ и добавьте /? везде, где дополнительный начальный / конечный слеш может вызвать проблемы и т. Д.

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