2011-12-04 4 views
0

CMS_의 모든 인스턴스를 X로 바꾸려고 시도했습니다. 지금까지 무한 루프를 얻는 데만 관리되었습니다.mod_write 무한 루프

Input: /mydir/?CMS_q=1&CMS_g=3 ... 
Output: ?Xq=1&Xg=3 ... 

은 htaccess로 :

RewriteEngine On 
RewriteRule ^/?mydir/(.+) $1      [R] 
RewriteRule ^(.*?)CMS_(.*?CMS_.*)$ $1X$2   [N,R] 
RewriteRule ^(.*?)CMS_(.*)$ $1X$2    [L,R] 

나는 몇 년 전 작업 스크립트를했다 그것을 잃었다. 나는 "한 번에 1을 남겨 둘 때까지 한 번에 1을 대체"하는 것을 기억하지 않지만 비슷한 질문에서 제안 된 것을 보았습니다. 그것을 상관없이 일하는 것처럼 보이지 않습니다.

답변

1

에서만 URI에 대해 일치한다 RewriteRule의 쿼리 문자열에 대해 일치하지 않을 수 있습니다. 당신이 사용하는 쿼리 문자열에서 CMS_을 제거 할 수 있습니다 : 쿼리에서 더 이상 CMS_이 없을 때까지 X으로 CMS_를 대체 할 루프이 허용

RewriteCond %{QUERY_STRING} (.*)CMS_(.*) 
RewriteRule ^(.*)$ /$1?%1X%2 

을 mod_rewrite를이 통해 루프 계속 끈. 확인 확인

RewriteCond %{QUERY_STRING} !CMS_ 
RewriteRule ^mydir/$/[L,R] 

최초의 필요성을 달리 앞에 가 mydir를 제거하는 규칙을 조기에 적용 할 쿼리 문자열에는 CMS_ (없다 : 두 번째 규칙 재생에 오는 곳이다) 그런 다음 앞에있는 mydir를 제거하십시오. 또한이 모든 것을하기 전에 RewriteEngine On을 잊지 마십시오. http://yourdomain.com/mydir/?CMS_q=1&CMS_w=2&CMS_e=3&CMS_r=4http://yourdomain.com/?Xq=1&Xw=2&Xe=3&Xr=4

로 리디렉션하는

이이 규칙은 요구가 발생합니다