Как использовать регулярное выражение в файле 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 ответа:
Во-первых, я предполагаю, что вы хотите замаскироваться наоборот.
В любом случае, ваш рерайтер будет:
RewriteRule ^([0-9]{1,10}-[0-9a-z]{5,9})/?$ realpage.php?id=$1 [QSA,L]
Примечания:
- предполагая, что ваше правило действует .htaccess файл, вам не нужно оберните свои узоры косыми чертами (
/
).- тебе это не нужно. включите первую косую черту url (после домена).
- Средний тире не обязательно должен быть в скобках, так как вам нужен только один тире.
- Наконец, вам нужно завернуть все это в скобки должны быть способный ссылаться на него (переписывать) к реальному пути, используя
$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]