2012-02-17 8 views
0

제목이 매우 모호하므로 사과드립니다.특정 패턴과 일치하는 mod_rewrite

문제는 다음 코드에 있습니다. 키워드 문 다음에 액션을 추가해야하지만 액션이 없을 때 액션이 키워드를 오버라이드하지 않도록하고 싶습니다.

대책에 입력 URL이 http://websitenamehere/uk/en/meet-us/update 및없이 :

http://websitenamehere/uk/en/meet-us 그래서 내가 무엇을 진행하는 4 개 이상의 문자의 문자열 인 경우에만 조치 절을 트리거하고 싶다. 이 htaccess 규칙은 비교할 때 설정된 국가 또는 언어에 의존해서는 안됩니다.

내가 무엇이든 놓친 경우 알려 주시면 질문을 업데이트하겠습니다. 나는 그것이 아주 간단해야한다는 것을 압니다. 그러나 그 순간 나는 htaccess를 통해 실수하고 나가서 가만히 기대고 있습니다.

#language 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([a-z]{2})/([a-z]{2})(?:/(.*)|)$ /$1/$3?lang=$2 [NC,QSA,PT] 

#country 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([a-z]{2})(?:/(.*)|)$ /$2?country=$1 [NC,QSA,PT] 

#keyword 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/]+)/(.*)/$ /$2?keyword=$1 [NC,QSA,PT] 

#actions 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php !-f 
RewriteRule ^([^/]+)/(.*)$ /?action=$1 [NC,QSA,PT] 

#withoutactions 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php !-f 
RewriteRule ^([^/]+)/(.*)$ /$2?keyword=$1 [NC,QSA,PT] 

RewriteCond %{REQUEST_URI} !(\.[^./]+)$ 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.+)/$ /$1.php [NC,QSA,PT] 

답변

0

오늘 알아 냈습니다. 근본적으로 무슨 일이 일어나고 있는지는 htaccess 파일에서 역 참조를 만들 때 규칙을 두 번 이상 통과 할 때 발생합니다.

나는 원래 키워드 라인에 스킵를 추가했지만 그것은 단순히 무시 될 것이다 :

#keyword 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/]+)/(.*)/$ /$2?keyword=$1 [NC,QSA,PT,S=1] 

#withoutactions 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php !-f 
RewriteRule ^([^/]+)/(.*)$ /$2?keyword=$1 [NC,QSA,PT] 

#actions 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php !-f 
RewriteRule ^([^/]+)/(.*)$ /?action=$1 [NC,QSA,PT] 

htaccess로는 S가 더 이상 적용되지 것입니다 두 번째를 실행하고 다음 withoutactions 차단 명중 할 때. 규칙을 건너 뛰려면이 키워드가 이미 쿼리 문자열에 존재하는 경우 단순히 확인을 우회 그렇다면하려면

#keyword 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^/]+)/(.*)/$ /$2?keyword=$1 [NC,QSA,PT,S=1] 

#withoutactions 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php !-f 
RewriteCond %{QUERY_STRING} !keyword 
RewriteRule ^([^/]+)/(.*)$ /$2?keyword=$1 [NC,QSA,PT] 

#actions 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php !-f 
RewriteRule ^([^/]+)/(.*)$ /?action=$1 [NC,QSA,PT] 

을 나는이 사람이 다시 참조와 유사한 문제가 발생 도움이되기를 바랍니다!

관련 문제