[mod_rewrite] Условия в подстановке.

DavyJohnes
На сайте с 05.01.2011
Offline
84
664

Здравствуйте!

Имеется вот такой rewrite:


RewriteRule ^go/(.+)?$ index.php?act=go&to=$1

Как можно заметить, в паттерне часть (.+)? необязательная, на что указывает '?'. Т.е. даже просто go/ по этому правилу пройдет. Однако, если перейти по этому правилу не указав параметры (т.е. просто go/) то скрипту index.php передается пустой параметр to, что не очень удобно, т.к. в скрипте идет проверка на isset(), а добавлять еще одно условие в скрипте не хочется. Так собственно вопрос: как сделать так, что бы вот эта часть:


to=$1

Имелась или отсутствовала в зависимости от того имеется или отсутствует в изначальном uri часть (.+)?

https://handy-tools.io (https://handy-tools.io) - Набор полезных утилит для всех!
A
На сайте с 19.07.2010
Offline
130
#1
DavyJohnes:


RewriteRule ^go/(.+)?$ index.php?act=go&to=$1

попробуйте так:


RewriteRule ^go/$ index.php?act=go [L]
RewriteRule ^go/(.+)$ index.php?act=go&to=$1
.............
DavyJohnes
На сайте с 05.01.2011
Offline
84
#2
admak:
попробуйте так:


RewriteRule ^go/$ index.php?act=go [L]
RewriteRule ^go/(.+)$ index.php?act=go&to=$1

Не пойдет, я привел простой пример, а на самом в моей задаче таких параметров с десяток, представляете как разрастется вся конструкция?)

A
На сайте с 19.07.2010
Offline
130
#3
DavyJohnes:
Не пойдет, я привел простой пример, а на самом в моей задаче таких параметров с десяток, представляете как разрастется вся конструкция?)

в общем случае: 1 маска = 1 строке в .htaccess

можно еще поиграться таким вариантом


RewriteRule ^(go|run|jump|drink|sex|sleep|happy)/$ index.php?act=$1 [L]
RewriteRule ^(go|run|jump|drink|sex|sleep|happy)/(.+)$ index.php?act=$1&to=$2

.

...представляю, поэтому я не использую построение ЧПУ через .htaccess

DavyJohnes
На сайте с 05.01.2011
Offline
84
#4

И что же? Остается только расширять скрипт? Как то не по душе, кажется что есть более элегантное решение...

siv1987
На сайте с 02.04.2009
Offline
427
#5

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

http://php.net/manual/ru/function.unset.php OR NULL + http://www.php.net/manual/ru/ini.core.php#ini.auto-prepend-file

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий