2013-07-11 4 views
2

URL의 % 20이 들어오는 모든 URL을 모든 항목에 대해 리디렉션하고 싶습니다.301 공백이 포함 된 URL 리디렉션

는 지금은이 링크를 얻을 -이 솔루션 완벽하게 작동하지만이 솔루션을 하나의 작은 문제가

Options +FollowSymlinks -MultiViews 
RewriteEngine on 

RewriteCond %{THE_REQUEST} (\s|%20) 
RewriteRule ^([^\s%20]+)(?:\s|%20)+([^\s%20]+)((?:\s|%20)+.*)$ $1-$2$3 [N,DPI] 
RewriteRule ^([^\s%20]+)(?:\s|%20)+(.*)$ /$1-$2 [L,R=301,DPI] 

을 제공

301 Redirect to replace all spaces to hyphens

. 이것은 또한의 이미지/문서/PDF 또는 기타 자원 및 결과에 대한 요청을 리디렉션 (404)

가 교체 리디렉션처럼 내가 특정 섹션과 모든 들어오는 연결을 리디렉션합니다 뭔가를 할 수 있습니다 단지에 대한

www.test.com/colleges/this%20is%20my%20link/123 to 
www.test.com/colleges/this-is-my-link/123 
or 
www.test.com/schools/this%20is%20my%20link/123 to 
www.test.com/schools/this-is-my-link/123 

및 기타 모든 요청을 그대로 둡니까 ??

+0

'% {THE_REQUEST}'는'GET /index.html HTTP/1.1'의 구조를 가지고 있다는 사실 때문에 항상 공백을 포함합니다. – Sumurai8

답변

1
이에 코드를 변경

:

RewriteRule \.(jpe?g|png|gif|ico|bmp|pdf|docx?|txt|css|js)$ - [L,NC] 

RewriteRule ^([^\s%20]+)(?:\s|%20)+([^\s%20]+)((?:\s|%20)+.*)$ $1-$2$3 [N,DPI] 
RewriteRule ^([^\s%20]+)(?:\s|%20)+(.*)$ /$1-$2 [L,R=301,DPI] 
+0

안녕하세요 @anubhava -이 dosent이 문제를 해결하는 것 같습니다. !. (| JPG | PNG | GIF | ICO | BMP | PDF | 문서 | DOCX | TXT | CSS | JS JPEG) $ [NC] 한다 RewriteRule^([^ 한다 RewriteCond % {REQUEST_URI} \ - 나는 추가 \ s % 20] +) (?: \ s % 20) + ([^ \ s % 20] +) ((? : \ s | % 20) +. *) $ $ 1- $ 2 $ 3 [N, DPI ] RewriteRule^([^ \ s % 20] +) (? : \ s | % 20) + (. *) $/$ 1- $ 2 [L, R = 301, DPI] http : /www.oureducation.in/Colleges/Education/Education/61/85 출력을 확인하십시오. –

+0

다른 수정을 한 후 지금 시도하십시오. – anubhava

+0

이것이 작동하는 것 같습니다. 테스트 중이 야. 고마워요. 작은 검색어가 있습니다. JPG와 같은 CAPS 확장자가있는 파일도 처리합니다. –

0

을 모두 당신이 원하는 것에 대해 대단히 복잡한 것 같다. 이론적으로 (!) 아파치는 %20 문자를 이스케이프 처리해야하고 일치하려는 문자열에 공백으로 대체, 그래서 다음과 같은 작업을해야합니다 :

RewriteRule ^([^\ ]+)\ (.*)$ $1-$2 [N] 

을 그것은 기본적으로 비에 요청 된 URI를 분할 공백 문자 다음에 공백 문자와 그 뒤에 오는 문자를 입력하고 공백을 -으로 다시 씁니다. 그런 다음 일치하지 않을 때까지 다음 공간을 바꿀 수 있도록 모든 재 작성 ([N])을 반복합니다. 문제가 때로는 공백이 실제 파일을 가지고, 당신은 당신이 실제 파일에 액세스하지 않는 경우에만 리디렉션을 할 것입니다 내용의 조건 앞에, 그 액세스하려는 경우

:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\ ]+)\ (.*)$ $1-$2 [N] 
관련 문제