mod_rewrite의 최대 URL 길이는 257 자입니까?


12

내 URL 체계는 /foo/var1-var2-var3.../bar입니다.

이 mod_rewrite 규칙을 사용하고 있습니다.

RewriteBase /foo/
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^ index.php [PT,L]

문자열 'var1-var2 ...'의 길이가 257자를 초과하면 403 Forbidden 및 404 오류가 리턴됩니다. 그러나 'var1-var2 ...'문자열의 길이가 257 자 이하이고 그 뒤에 슬래시가 있으면 나머지 URL의 길이는 임의의 길이 일 수 있습니다. 이 한계를 어떻게 극복합니까?

답변:


12

기본 파일 시스템의 한계에 부딪 쳤습니다.

File System Limits를 살펴보십시오 . 대부분의 최대 파일 이름 길이는 255 바이트입니다. 따라서 아파치 및 / 또는 다시 쓰기 규칙이 파일이 존재하는지 확인하면 오류가 운영 체제에 의해 아파치로 반환됩니다.

Apache를 사용하면 이와 같은 규칙을 .htaccess 파일에 넣으면 문제를 해결하기에 너무 늦습니다. Apache는 이미 긴 파일 이름을 지정하려고 시도하여 파일 시스템 오류 '(36) 파일 이름이 너무 깁니다'를 발생시켜 403 오류를 리턴합니다.

두 가지 옵션이 있습니다.

  1. 응용 프로그램의 URL 형식을 각 슬래시 사이에서 최대 255 자로 변경하십시오.
  2. Rewrite 규칙을 Apache 가상 호스트 구성으로 이동하고 REQUEST_FILENAME을 제거하십시오.

.htaccess 파일에 {REQUEST_FILENAME}이 포함되어 있지만 여전히 403을 반환하는 경우 여전히 문제가 될 수 있습니까? ( serverfault.com/questions/140852/… )
Philphilo

1
다시 쓰기 규칙을 apache config로 이동 해야합니다 . 이것은 기능을 유지하고 문제를 해결 하는 유일한 방법입니다.
h0tw1r3

3
아파치 가상 호스트 설정에 htaccess로에서 규칙을 이동하면 변경해야 %{REQUEST_FILENAME}=> %{DOCUMENT_ROOT}%{REQUEST_FILENAME}예를 들어,하지, 또한 당신의 URL 패턴의 시작에 슬래시를 추가 RewriteRule ^abc ...하지만 RewriteRule ^/abc .... 당신은 mod_rewrite의 직설 성을 좋아해야합니다.
ash108

2
"다시 쓰기 규칙을 아파치 가상 호스트 구성으로 이동"부분은 황금색입니다. 제가 시도한 많은 다른 해결 방법과 달리 실제로 제대로 구현 될 때 실제로 작동합니다.
ash108
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.