Как добавить (плюс) в регулярное выражение в перезаписи Apache?

#regex #apache #.htaccess #apache2

Вопрос:

В настоящее время у меня в .htaccess файле есть следующее, которое переписывает A-Z, 1-9,a-z и — входы в файл PHP:

 RewriteRule ^([A-Z­a-z­0-9­-] )/?$ index.php?url=$1 [L]  

Мне нужно добавить к регулярному выражению. Как я могу это сделать?

Я пытался:

 RewriteRule ^([A-Z­a-z­0-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!