2014-11-13 4 views
3

mod_rewrite regex에서 match quantifier {}를 사용하고 quantifier가 1 회 또는 2 회 일치하면 규칙 작업을 다시 작성하고 3 회 이상 일치하면 작동하지 않습니다. 왜?Apache mod_rewrite 정규식 제한 최대 일치 수량?

예 htaccess로 파일 :

이 작품 (내가 요구 mydomain.com/download .) :

RewriteEngine On 
RewriteRule ^download\..{1,2}$ /download.php [L] 

그러나이 작동하지, 만 3 최대 2 변경 500 오류 정량 (난 필요 mydomain.com/download EXE합니다.) :

RewriteEngine On 
RewriteRule ^download\..{1,3}$ /download.php [L] 

그것은 환상적이다,하지만이 실제 . 왜 그런가?

p.s. 버전 :

[email protected]:/var/www/default/www# apache2 -v 
Server version: Apache/2.4.7 (Ubuntu) 
Server built: Jul 22 2014 14:36:38 

[email protected]:/var/www/default/www# uname -a 
Linux mydomain.com 3.13.0-24-generiC#46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 x86_64   x86_64 GNU/Linux 

[email protected]:/var/www/default/www# lsb_release -a 
No LSB modules are available. 
Distributor ID: Ubuntu 
Description: Ubuntu 14.04.1 LTS 
Release:  14.04 
Codename:  trusty 

답변

0

정규식 \.{1,3}는 잘 작동하지만 그것도 /download.php과 일치 무한 따라서 500 오류가 발생합니다 루프 mod_rewrite를 발생하기 때문에 작동하지 않습니다.

이이 확장 .php 때 재 작성을 중지하는 부정적 예측이 극복하려면,이 무한하기 때문에 루프의 경우

RewriteEngine On 
RewriteBase/

RewriteRule ^download\.(?!php$).{1,3}$ download.php [L,NC] 
+0

왜 첫 번째 변종 ({1,2}) 작업 괜찮지? – Andrey

+0

범위가 3 이상인 경우에만'\. {1,2}'는'.php'와 일치하지 않으므로'.php'와 일치합니다. 솔루션을 테스트 해 보셨습니까? – anubhava

+1

고맙습니다. 문제를 이해했습니다. 그러면 download.php의 이름을 바꾸는 것이 더 쉬울 것입니다. _download.php'RewriteRule^download \ .. {1,3} $ /_download.php [L]' – Andrey