Назад | Перейти на главную страницу

Сделайте так, чтобы сокращенные и длинные URL-адреса воспроизводились вместе в одном домене (RewriteRule)

Короче говоря, я хочу иметь оба 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, за которой сразу следует символ конца строки и непосредственно перед ней стоит символ / персонаж.