Как вы используете регулярное выражение в файле htaccess? - PullRequest
2 голосов
/ 11 июля 2011

Я создал регулярное выражение [0-9]{1,10}[-][0-9a-z]{5,9}, чтобы найти от 1 до 10 чисел, за которыми следуют тире, за которыми следуют от 5 до 9 цифр и строчные буквы, и, насколько я могу судить, работает. Но как мне использовать его в файле htaccess для маскировки URL-адресов от http://website.com/realpage.php?id=00000-a0a0aaa0 до http://website.com/00000-a0a0aaa0.

Правило, которым я сейчас пользуюсь, это ...

RewriteRule /[0-9]{1,10}[-][0-9a-z]{5,9}/?$ realpage.php?id=$1 [QSA,L]

... но, похоже, это не работает.

Ответы [ 2 ]

1 голос
/ 11 июля 2011

Во-первых, я думаю, вы захотите замаскировать наоборот.

В любом случае, ваше RewriteRule будет:

RewriteRule ^([0-9]{1,10}-[0-9a-z]{5,9})/?$ realpage.php?id=$1 [QSA,L]

Примечания:

  1. Предполагая, что ваше правило находится в файле .htaccess, вам не нужно переносить шаблоны в косые черты (/).
  2. Вам не нужно указывать первую косую черту URL-адреса (после домена).
  3. Средний тире не обязательно должен быть в скобках, так как нужен всего один тире.
  4. Наконец, вам нужно обернуть все это в скобки, чтобы иметь возможность ссылаться на него (переписать) на реальный путь, используя в этом случае $1.

Надежда, которая делаетчувство.

0 голосов
/ 11 июля 2011

Ну, вам нужны скобки вокруг бита, который вы хотите сопоставить, если вы используете его в качестве замены, $1 говорит о первой соответствующей группе скобок, также вам не нужно [] вокруг тире - .

RewriteRule /([0-9]{1,10}-[0-9a-z]{5,9})/?$ realpage.php?id=$1 [QSA,L]

В качестве альтернативы, если вы хотите это по-другому, ваши «маски URL-адресов из» сбивают с толку.

Нельзя сопоставить параметры строки запроса с RewriteRule напрямую.

Вы должны использовать RewriteCond, чтобы сопоставить его, затем используйте RewriteRule, чтобы сделать переписывание.

RewriteCond %{QUERY_STRING} id=([0-9]{1,10}[-][0-9a-z]{5,9})
RewriteRule ^realpage.php$ /%1/ [L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...