Как использовать регулярное выражение в файле htaccess?


Я создал регулярное выражение [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 2

2 ответа:

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

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

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

Примечания:

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

Надеюсь, что имеет смысл.

Ну, вам нужны скобки вокруг бита, которому вы хотите соответствовать, если вы используете его в качестве замены, то $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]