내 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의 길이는 임의의 길이 일 수 있습니다. 이 한계를 어떻게 극복합니까?
답변
기본 파일 시스템의 한계에 부딪 쳤습니다.
File System Limits를 살펴보십시오 . 대부분의 최대 파일 이름 길이는 255 바이트입니다. 따라서 아파치 및 / 또는 다시 쓰기 규칙이 파일이 존재하는지 확인하면 오류가 운영 체제에 의해 아파치로 반환됩니다.
Apache를 사용하면 이와 같은 규칙을 .htaccess 파일에 넣으면 문제를 해결하기에 너무 늦습니다. Apache는 이미 긴 파일 이름을 지정하려고 시도하여 파일 시스템 오류 ‘(36) 파일 이름이 너무 깁니다’를 발생시켜 403 오류를 리턴합니다.
두 가지 옵션이 있습니다.
- 응용 프로그램의 URL 형식을 각 슬래시 사이에서 최대 255 자로 변경하십시오.
- Rewrite 규칙을 Apache 가상 호스트 구성으로 이동하고 REQUEST_FILENAME을 제거하십시오.