2013-04-25 1 views
2

.. 내가 그것을 줄일 수있는 방법에 어떤 아이디어 나에게 조금 부피가 보인다 물건을 많이 반복 /단축 압축의 mod_rewrite 규칙 내가 가진 내 규칙 사이

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/([^/\.]+)/?$ index.php?page=$1&submenu=$2&info=$3&id=$4 [QSA,L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/?$ index.php?page=$1&submenu=$2&info=$3 [QSA,L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/\.]+)/([^/\.]+)/?$ index.php?page=$1&submenu=$2 [QSA,L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/\.]+)/?$ index.php?page=$1 [QSA,L] 

?

"글로벌"조건을 설정할 수 있습니까? 는 내가 그것을

domain.com/a/b/c을 캡처하는 것 (비어 varibles을 통해 전송하는 경우 난 상관 해달라고) 그래서

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule **clever stuff here** index.php?page=$1&submenu=$2&info=$3&id=$4 [QSA,L] 

아래에있는 모든 사람을 캡처 같은 하나의 규칙을 가질 수/D 및 domain.com/a/b/c 및

domain.com/a domain.com/a/b 및

답 생각 담고, 실존 인수 모두 알 ...

답변

0

반전을 확인하고 재 작성 엔진을 통과 시키면 조건을 쉽게 제거 할 수 있습니다. 그리고 아무것도 나중에 당신도 알다시피 기존의 파일이나 디렉토리가 아니다 :

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule^- [L] 

RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/([^/\.]+)/?$ index.php?page=$1&submenu=$2&info=$3&id=$4 [QSA,L] 
RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/?$ index.php?page=$1&submenu=$2&info=$3 [QSA,L] 
RewriteRule ^([^/\.]+)/([^/\.]+)/?$ index.php?page=$1&submenu=$2 [QSA,L] 
RewriteRule ^([^/\.]+)/?$ index.php?page=$1 [QSA,L] 

이 한 줄에 모두 않는 멋진 다중보기 미리 정규식이 아니다,하지만 그것은 쉽게 읽을 수 있도록 않습니다.

편집 :

그럼 내가 말했듯이, 여러 모양 이것은 미리 뭔가처럼 함께 할 :

RewriteRule ^(?:([^/.]+)|)(?:/([^/.]+)|)(?:/([^/.]+)|)(?:/([^/.]+)|) index.php?page=$1&submenu=$2&info=$3&id=$4 [QSA,L] 

그러나 읽고,하고 단단 당신이 경우 예상치 못한 일을 할 가능성이 더 높습니다 무언가를 바꾸다. 또한 명시 적으로 4 개의 서로 다른 매핑을 사용하는 것과 달리 미리보기를 사용하는 것과 같이 빈 쿼리 문자열 매개 변수를 가져 오지는 않습니다. 마지막으로 (?:/([^/.]+)|)이 있는지 여부에 관계없이 id 매개 변수 (공백) 만 표시됩니다.

+0

브릴리언트, 위선적 인 말투는 내가 그것을 생각하지 않았다라고 생각한다! 확실히 나는 그걸로 행복하지만 난 정규 표현식 전문가가 한 줄을 생각 해낼 때까지 약간의 시간을 줄 때까지 대답하지 않을거야! 그래도 고마워. – fiscme

+0

분명히 나는 ​​정규식 전문가의 면전에서 .. 감사합니다. – fiscme