Упростить переписывание URL-адресов в .htaccess?

RewriteRule ^([A-Za-z0-9_\-]+)$ /userviewproducts.php?category=$1 [L]
RewriteRule ^([A-Za-z0-9_\-]+)/$ /userviewproducts.php?category=$1 [L]
RewriteRule ^([A-Za-z0-9_\-]+/[A-Za-z0-9_\-]+)$ /userviewproducts.php?category=$1 [L]
RewriteRule ^([A-Za-z0-9_\-]+/[A-Za-z0-9_\-]+)/$ /userviewproducts.php?category=$1 [L]
RewriteRule ^([A-Za-z0-9_\-]+/[A-Za-z0-9_\-]+/[A-Za-z0-9_\-]+)$ /viewbuyproduct.php?1=$1 [L]
RewriteRule ^([A-Za-z0-9_\-]+/[A-Za-z0-9_\-]+/[A-Za-z0-9_\-]+)/$ /viewbuyproduct.php?1=$1 [L]

У меня есть следующие правила. Они работают таким образом:

if url = /a or /a/ or /a/a or /a/a/ go to file userviewproducts.php
and if url = /a/a/a or /a/a/a/ go to file viewbuyproduct.php

Он работает так, как мне нужно, но я вижу здесь термин CODE-SMELLS и хочу писать его короче. Будет плюс каждый ответ =)

1 голос | спросил RusAlex 17 FriEurope/Moscow2010-12-17T14:22:30+03:00Europe/Moscow12bEurope/MoscowFri, 17 Dec 2010 14:22:30 +0300 2010, 14:22:30

3 ответа


2

Попробуйте следующее:

RewriteRule ^([A-Za-z0-9_\-]+)/?$ /userviewproducts.php?category=$1 [L]
RewriteRule ^([A-Za-z0-9_\-]+/[A-Za-z0-9_\-]+)/?$ /userviewproducts.php?category=$1 [L]
RewriteRule ^([A-Za-z0-9_\-]+/[A-Za-z0-9_\-]+/[A-Za-z0-9_\-]+)/?$ /viewbuyproduct.php?1=$1 [L]

Это короче.

ответил Marco Demaio 17 FriEurope/Moscow2010-12-17T16:21:17+03:00Europe/Moscow12bEurope/MoscowFri, 17 Dec 2010 16:21:17 +0300 2010, 16:21:17
1

Прочитайте Регулярные выражения . Лучшее понимание их поможет вам писать короткие правила здесь и в будущем.

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

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

ответил dunxd 17 FriEurope/Moscow2010-12-17T15:24:48+03:00Europe/Moscow12bEurope/MoscowFri, 17 Dec 2010 15:24:48 +0300 2010, 15:24:48
0

Это может быть дополнительно упрощено:

RewriteRule ^([\w-]+(/[\w-]+)?)/?$ /userviewproducts.php?category=$1 [L]
RewriteRule ^([\w-]+/[\w-]+/[\w-]+)/?$ /viewbuyproduct.php?1=$1 [L]

\w является сокращением для [A-Za-z0-9_] .

- (дефис) не требуется экранировать при использовании в начале или конце класса символов.

? в конце делает предыдущую косую черту необязательной.

Наконец, первые два правила (замены) объединяются, делая вторую часть шаблона опциональной. то есть. (/[\w-]+)?. $1 по-прежнему совпадает с целым URL-адресом, за исключением конечной косой черты (если есть).

ответил MrWhite 23 Jam1000000amSat, 23 Jan 2016 03:15:29 +030016 2016, 03:15:29

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132