what's the total number of "a"s in:
q: необязательные параметры rewriterule чпу в .htaccess можно ли указывать необязательные параметры 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]


a: mod_rewrite останавливается на первом правиле, которое подходит.
строка cats/1/2/3/4 соответствует и ^cats/(.*)/(.*)/(.*)/(.*)$, и ^cats/(.*)/(.*)/(.*)$. если хотите получить свободу перестановки, то побеспокойтесь о том, чтобы соответствующие строки не пересекались. например, можно заменить (.*) на ([^/]*). ну и * я бы заменил на +, потому что пустых "директорий" уж точно следует избегать.
для опциональных параметров можете воспользоваться квантификатором ?, например, ^cats(/([^/]+)(/([^/]+)(/([^/]+)(/([^/]+))?)?)?)?$. но это ужас, конечно, и так делать не стоит.
p. s. такие урлы ни в каком приближении не являются "человекопонятными". такими правилами вы только запутаете поисковики, которые заблудятся в ваших бесконечных "директориях". не надо бездумно превращать каждый get-аргумент в директорию.
p. p. s. воспользуйтесь роутером на php, а не генерируйте кашу в .htaccess. см. "как сделать всё и сразу в mod_rewrite?"

user
The given text has 33 "a"s.
assistant