단축된 URL과 긴 URL이 동일한 도메인에서 함께 재생되도록 합니다(RewriteRule).

단축된 URL과 긴 URL이 동일한 도메인에서 함께 재생되도록 합니다(RewriteRule).

간단히 말해서, 저는 둘 다 갖고 example.com/aJ5함께 example.com/any-other-url일하고 싶습니다. 저는 아파치를 사용하고 있는데 정규식 작성에 능숙하지 않습니다.

나는 이미 RewriteRule모든 것을 앱 진입점으로 보내는 전역 변수를 가지고 있습니다. 내가 필요한 것은 아파치에게 말한 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제어가 원하는 핸들러로 전환됩니다. 5자를 초과하는 URL이나 '슬러그' 문자 "-" 또는 밑줄이 포함된 URL은 건너뜁니다.

%1마지막 RewriteCond역참조인 가 단축 URL로 확장됩니다. 이를 먼저 적용하려면 이를 다른 규칙 위에 배치하세요. 플래그를 사용하면 [L]URL 재작성을 중지하고 제어권을 앱에 전달합니다.

답변2

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

이는 길이가 1~5자 사이의 모든 요청과 일치하며 다음 RewriteRule을 실행합니다. 그보다 더 긴 것은 RewriteRule을 실행하지 않습니다. REQUEST_URI 변수는 브라우저가 웹 서버에 전달한 것입니다. 단일 RewriteRule에서도 동일한 작업을 처리할 수 있지만 위의 경우 필요한 경우 연결을 허용합니다.

 ^/.{1,5}$

^ = 문자열의 시작 부분과 일치합니다.
/ = 슬래시만 일치합니다
. = 개행 문자가 아닌 문자 하나와 일치합니다.
{1,5} = 이전 문자와 1~5회 일치하도록 정규식 엔진에 알립니다.
$ = 줄 끝 문자와 일치합니다.

/.{1,5}$구문은 정규식 엔진에 줄 끝 문자 바로 다음에 해당 문자 바로 앞에 오는 1-5 크기의 문자열과 일치하도록 지시합니다 /.

관련 정보