.htaccess Необязательные символы? - PullRequest
2 голосов
/ 17 апреля 2009

Хотя .htaccess, я хочу перенаправить / page / var1 / var2 на ./page.php?var1=var1&var2=var2. Это очень просто, НО я хочу сделать так, чтобы / page / var1 также перенаправлял на ./page.php?var1=var1 (без использования var2). Единственный способ сделать это:

RewriteRule page/(.*)$ ./page.php?var1=$1
RewriteRule page/(.*)/(.*)$ ./page.php?var1=$1&var2=$2

Как вы можете видеть, это очень избыточно, и у меня тонна таких строк, так что получается очень грязно. Любой способ определить «дополнительные» части?

Ответы [ 3 ]

4 голосов
/ 17 апреля 2009

Выражение .* соответствует обоим var1 и var1/var2, поэтому первое правило применяется к обоим.

Таким образом, вы должны указать, что первое правило соответствует только var1. Это можно сделать, заменив . (любой символ) на [^/] (любой символ, кроме /). Итак, попробуйте это:

RewriteRule ^page/([^/]+)$ ./page.php?var1=$1
RewriteRule ^page/([^/]+)/([^/]+)$ ./page.php?var1=$1&var2=$2

Редактировать Вы также можете написать это в одном правиле:

RewriteRule ^page/([^/]+)(/([^/]+))?$ ./page.php?var1=$1&var2=$3
2 голосов
/ 17 апреля 2009

mod_rewrite не очень подходит для такой тяжелой работы, оставьте это для вашего PHP-приложения.

 RewriteRule page/(.*)$ ./page.php?vars=$1

и где-то в начале page.php:

 <?php
 $vars = explode('/',$_GET['vars']);

Вуаля, у вас есть массив ваших переменных; теперь вы можете выполнить некоторую обработку, чтобы увидеть, что требуется / необязательно для вашего приложения, и соответственно отреагировать.

1 голос
/ 17 апреля 2009

Лучший способ - просто передать все в ваш PHP-скрипт.

Я написал статью о том, как сделать дружественные URL-адреса , которая более подробно описывает это.

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