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

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

Короче говоря, я хочу, чтобы и то, и другое example.com/aJ5работало example.com/any-other-urlвместе. Я использую Apache и не очень хорош в написании регулярных выражений.

У меня уже есть глобальный RewriteRule, который отправляет все в точку входа приложения. Мне нужно сказать apache, if length($path) is <= 5 charsа затем переписать в другое место.

Я знаю, что могу использовать {1,5}подобный синтаксис в регулярных выражениях, но не уверен, что это то, что я ищу.

Я хотел бы реализовать это на уровне веб-сервера, а не на уровне php. Любая помощь приветствуется.

решение1

Если вы можете предположить, что -символ не будет включен в короткие URL-адреса:

RewriteCond %{REQUEST_URI} ^/([a-zA-Z0-9]){1,5} 
RewriteRule ^ /app-entry-point?url=%1 [L]

Это не проверено, но что-то вроде этого должно работать. По сути, вы передаете условие, если REQUEST_URIесть что-то вроде /abc12, управление переключается на любой обработчик, который вам нужен. Он будет пропускать URL-адреса длиной более 5 символов или содержащие символ 'slug' "-" или подчеркивание.

%1, последняя RewriteCondобратная ссылка, будет расширена до короткого URL. Поместите это выше других правил, чтобы обеспечить это в первую очередь — с флагом [L]это прекратит перезаписывать URL и передаст управление приложению.

решение2

 RewriteCond %{REQUEST_URI}   ^/.{1,5}$
 RewriteRule ...

Это будет соответствовать любому запросу длиной от одного до пяти символов и запустит следующее RewriteRule. Все, что длиннее, не запустит RewriteRule. Переменная REQUEST_URI — это то, что браузер передал веб-серверу. То же самое можно было бы обработать в одном RewriteRule, но вышеприведенное позволяет объединять в цепочку, если вам это нужно.

 ^/.{1,5}$

^ = Соответствует началу строки
/ = Соответствует только косой черте
. = Соответствует любому одному символу, кроме символа новой строки
{1,5} = Сообщает движку регулярных выражений о необходимости сопоставления предыдущего символа 1-5 раз
$ = Соответствует символу конца строки

Конструкция /.{1,5}$сообщает движку регулярных выражений, что необходимо сопоставить любую строку размером от 1 до 5, за которой сразу следует символ конца строки и непосредственно перед которым находится символ /.

Связанный контент