.htaccess 리디렉션, 이전 더티 URL에서 매개변수가 있는 깨끗한 새 URL로

.htaccess 리디렉션, 이전 더티 URL에서 매개변수가 있는 깨끗한 새 URL로

다음 2개의 링크가 있습니다. .htaccess 규칙이 좋지 않습니다.아직.

Old URL: http://www.mywebsite.org.uk/donate/donate.php?charity_id=885&project_id=18111
New URL: http://new.mywebsite.org.uk/donation/to/885/18111

이전 URL에서 새 URL로 들어오는 모든 트래픽을 원합니다(매개변수 charity_id& 포함 project_id).

.htaccess 규칙을 배우려고 노력하고 있지만 온라인 튜토리얼이 다소 모호한 것으로 나타났습니다.

.htaccess 규칙에 대한 간단한 설명을 정말 듣고 싶습니다.

(사람에게 물고기를 주면 하루 동안 먹을 수 있다.사람에게 낚시하는 법을 가르쳐주고 평생 먹여살려라).

정답은 간단하고 유용한 설명이 포함된 답변입니다(가능한 경우 규칙도 함께!).

답변1

.htaccess 규칙을 설정하는 방법을 배우려면 최소한 약간의 정규식 기술이 필요하고 mod_rewrite Apache 모듈을 사용할 수 있어야 합니다. 유연성 덕분에 재작성 규칙을 구축하는 데 편리하기 때문입니다.

그렇다면 코드는 다음과 같을 수 있습니다.

RewriteEngine On
RewriteCond %{QUERY_STRING} ^charity_id=([0-9]+)&project_id=([0-9]+)$
RewriteRule donate/donate.php http://new.mywebsite.org.uk/donation/to/%1/%2? [L,R=301]

~에http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html(2.4 Apache 버전의 경우 해당되는 경우 다른 버전을 선택하세요)는 유용한 참조 자료이므로 위 코드를 더 잘 이해하려면 여기부터 시작해야 합니다.

를 다시 작성하기 위한 벽돌로 생각할 수 있으므로 RewriteRule모든 규칙은 이를 최소한 한 번 사용합니다. RewriteCond코드에서와 같이 환경 변수를 확인하거나 쿼리 문자열 값을 참조해야 하는 경우 이전에 추가할 것입니다 .

이전에서 오는 대체 문자열에 역참조를 배치하려면 from to 값을 RewriteCond사용합니다 . 자체 의 첫 번째 부분에서 역참조가 필요한 경우 to 를 사용합니다 .%1%9RewriteRule$1$9

대체 URL 끝에 있는 물음표 기호에 주의하세요. 이는 쿼리 문자열을 건너뛰는 방법이기 때문입니다. 누락된 경우 ?charity_id=885&project_id=18111새 URL 끝에 이 표시됩니다 .

답변2

다른 게시물에서 sysadmin1138은 모드 재작성에 대한 매우 훌륭한 소개를 작성했습니다.

게시물을 찾아보실 수 있습니다여기.

/편집: 예:

old: http://example.com/path?var=val 
new: http://example.com/path/var/val

.htaccess

RewriteCond %{QUERY_STRING} ^(\w+)=(\w+)$
RewriteRule ^/path /path/%1/%2?

관련 정보