#regex #apache #.htaccess #apache2
Вопрос:
В настоящее время у меня в .htaccess
файле есть следующее, которое переписывает A-Z, 1-9,a-z и — входы в файл PHP:
RewriteRule ^([A-Za-z0-9-] )/?$ index.php?url=$1 [L]
Мне нужно добавить к регулярному выражению. Как я могу это сделать?
Я пытался:
RewriteRule ^([A-Za-z0-9- ] )/?$ index.php?url=$1 [L]
Я также просмотрел несколько шпаргалок с регулярными выражениями, которые на самом деле бесполезны.
Комментарии:
1. Какой фактический URL-адрес вы пытаетесь сопоставить?
Ответ №1:
По номинальной стоимости опубликованное вами регулярное выражение «ОК» и должно работать (хотя вам следует рассмотреть возможность удаления последней косой черты в классе символов или переноса ее на последний символ в классе символов, чтобы избежать какой-либо неопределенности в будущем, когда оно будет интерпретироваться как индикатор диапазона). Его
можно использовать без эскиза в классе символов, так как здесь он не имеет особого значения.
Например (скопируйте/вставьте следующее):
RewriteRule ^([A-Za-z0-9 -] )/?$ index.php?url=$1 [L]
(При этом были удалены ошибочные символы — см. Ниже.)
В качестве альтернативы, если вы также согласны с соответствием подчеркиванию ( _
), вы можете использовать w
класс сокращенных символов (символы слов), чтобы немного упростить его: ^([w -] )/?$
ОДНАКО у вас есть мягкий дефис ( U 00AD
), невидимый невооруженным глазом, встроенный между каждым диапазоном в классе символов, что может нарушать регулярное выражение. Например, расширяя скрытые символы юникода, вы пытаетесь использовать фактическое (недопустимое) регулярное выражение:
^([A-ZU 00ADa-zU 00AD0-9U 00AD- ] )/?$
Комментарии:
1. Спасибо вам за это — действительно подробное объяснение, которое решило мою проблему. Очень признателен, @MrWhite!