Короче говоря, я хочу иметь оба example.com/aJ5
и example.com/any-other-url
работаем вместе. Я использую apache и не очень хорошо пишу регулярное выражение.
У меня уже есть глобальный RewriteRule
который отправляет все в точку входа в приложение. Мне нужно сказать Apache if length($path) is <= 5 chars
затем перепишите в другое место.
Я знаю, что могу использовать {1,5}
как синтаксис в регулярном выражении, но на самом деле не знаю, что я ищу.
Я бы хотел реализовать это на уровне веб-сервера, а не на уровне php. Любая помощь приветствуется.
Если вы можете предположить, что -
символ не будет включен в короткие URL-адреса:
RewriteCond %{REQUEST_URI} ^/([a-zA-Z0-9]){1,5}
RewriteRule ^ /app-entry-point?url=%1 [L]
Это не проверено, но что-то вроде этого должно работать. По сути, вы передаете условие, если REQUEST_URI
что-то вроде /abc12
, управление переключает на любой обработчик, который вы хотите. Он будет пропускать URL-адреса, длина которых превышает 5 символов или которые содержат символ "-" или подчеркивание.
%1
, последний RewriteCond
обратная ссылка будет расширена до короткого URL. Поместите это выше других ваших правил, чтобы обеспечить соблюдение этого в первую очередь - с [L]
flag он перестанет переписывать URL-адреса и передаст управление приложению.
RewriteCond %{REQUEST_URI} ^/.{1,5}$
RewriteRule ...
Это будет соответствовать любому запросу длиной от одного до пяти символов и запустит следующий RewriteRule. Все, что длиннее, не запустит RewriteRule. Переменная REQUEST_URI - это то, что браузер передал веб-серверу. То же самое можно сделать в одном RewriteRule, но приведенное выше позволяет создавать цепочки, если вам это нужно.
^/.{1,5}$
^ = Соответствует началу строки
/ = Просто соответствует косой черте
. = Соответствует любому символу, кроме символа новой строки
{1,5} = Сообщает механизму регулярных выражений соответствие предыдущему символу 1-5 раз
$ = Соответствует символу конца строки
В /.{1,5}$
конструкция указывает механизму регулярных выражений соответствие любой строке размера 1-5, за которой сразу следует символ конца строки и непосредственно перед ней стоит символ /
персонаж.