Можно ли указывать необязательные параметры RewriteRule при написании ЧПУ. Допустим есть скрипт с запросом - cats.php?type=test&id=1&sort=datea&page=1
и для него пишем:
RewriteRule ^cats/(.*)/(.*)/(.*)/(.*)$ cats.php?type=$1&id=$2&sort=$3&page=$4 [L]
А что если допустим, переменная page не обязательна и можно обратиться к скрипту без нее - cats.php?type=test&id=1&sort=datea. Как правильно написать такое правило?
Может быть так?
RewriteRule ^cats/(.*)/(.*)/(.*)/(.*)$ cats.php?type=$1&id=$2&sort=$3&page=$4 [L]
RewriteRule ^cats/(.*)/(.*)/(.*)$ cats.php?type=$1&id=$2&sort=$3 [L]
Забавно, но вот так вот работает:
RewriteRule ^cats/(.*)/(.*)/(.*)/(.*)$ cats.php?type=$1&id=$2&sort=$3&page=$4 [L]
RewriteRule ^cats/(.*)/(.*)/(.*)$ cats.php?type=$1&id=$2&sort=$3 [L]
А вот так вот, нет:
RewriteRule ^cats/(.*)/(.*)/(.*)$ cats.php?type=$1&id=$2&sort=$3 [L]
RewriteRule ^cats/(.*)/(.*)/(.*)/(.*)$ cats.php?type=$1&id=$2&sort=$3&page=$4 [L]
mod_rewrite останавливается на первом правиле, которое подходит.
Строка cats/1/2/3/4
соответствует и ^cats/(.*)/(.*)/(.*)/(.*)$
, и ^cats/(.*)/(.*)/(.*)$
. Если хотите получить свободу перестановки, то побеспокойтесь о том, чтобы соответствующие строки не пересекались. Например, можно заменить (.*)
на ([^/]*)
. Ну и *
я бы заменил на +
, потому что пустых "директорий" уж точно следует избегать.
Для опциональных параметров можете воспользоваться квантификатором ?
, например, ^cats(/([^/]+)(/([^/]+)(/([^/]+)(/([^/]+))?)?)?)?$
. Но это ужас, конечно, и так делать не стоит.
P. S. Такие урлы ни в каком приближении не являются "человекопонятными". Такими правилами вы только запутаете поисковики, которые заблудятся в ваших бесконечных "директориях". Не надо бездумно превращать каждый GET-аргумент в директорию.
P. P. S. Воспользуйтесь роутером на PHP, а не генерируйте кашу в .htaccess. См. "Как сделать всё и сразу в mod_rewrite?"
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Судя по документации bitnami (https://docsbitnami
Как мне сохранить состояние элементов на странице? Чтобы на емейл пришла ссылка с элементами которые выбрал пользовательИ при переходе...
Как мне перенести локальное приложение Laravel на хостинг, но потом как-то применять миграцию в БД?