가장 큰 문제는 RewriteRule
의 일부로 쿼리 문자열을 일치시킬 수 없다는 것입니다. 해당 부분을 RewriteCond
문으로 이동해야합니다.
RewriteEngine On
RewriteCond %{QUERY_STRING} jid=([0-9]+)
RewriteRule ^job_wanted\.php$ /job/%1?
업데이트 된 질문을 반영하여 편집하십시오. 여기에 나와있는 것과는 반대입니다.
RewriteEngine On
RewriteRule ^/job/([0-9]+)$ /path/to/job_wanted.php?jid=$1
하지만 당신은 아마 문제 루트를 제외하고 어디서나 .htaccess
파일이 퍼팅을해야 할 것, 그리고 어쩌면있어 : 반대를 들어, PHP 스크립트가 소비 할 수있는 무언가로 /job/123
을 변환, 당신이 원하는 것 그곳에. 루트에서 작동하는 경우 여기에 표시되는 RewriteRule
에서 선두 /
을 제거해야 할 수 있습니다.
두 번째 편집 의견을 반영하기 위해 : 나는 당신이 원하는 것은 복잡하다 생각하지만, 문제가 해결 될 수 있습니다
RewriteEngine On
RewriteRule ^/job/([0-9]+)$ /path/to/job_wanted.php?jid=$1 [L]
RewriteCond %{QUERY_STRING} jid=([0-9]+)
RewriteRule ^job_wanted\.php$ http://host.name/job/%1? [R]
귀하의 근본적인 문제는 아마도 당신의 통제에서 "수정"기존 링크를 원하는 것입니다 . 브라우저 주소 표시 줄의 URL을 변경하려면 브라우저를 리디렉션해야합니다. 다른 방법으로는 할 수 없습니다.
두 번째 cond + 규칙은 수신 대기하는 이전 URL과 일치하고 예쁜 URL 형식으로 리디렉션합니다. 이 중 하나는 VirtualHost
구성 블록이나 PHP 스크립트와 동일한 디렉토리에있는 .htaccess
파일에 있어야합니다.
첫 번째 규칙은 반대의 역할을합니다. 예쁜 URL을 Apache에서 사용할 수있는 것으로 다시 변환하지만 내부 하위 요청을 사용하면 다시 작성을 다시 시도하지 않습니다. 그렇다면 무한 루프가 발생합니다. 작동하면 작업 ID에 대한 쿼리 문자열 매개 변수가있는 PHP 스크립트가 호출되고 페이지가 계속 작동합니다. 이 규칙은 존재하지 않는 파일 시스템 경로가 다른 것으로 가정하기 때문에 VirtualHost
블록 또는 다른 루트 인에있는 .htaccess
파일에 있어야합니다.
다른 곳에서 구성을 확산시키는 것은 나에게 향후 문제가 될 수있는 처방처럼 들리지만 권장하지 않습니다. 당신이 제어 할 수있는 링크를 예쁜 버전으로 변경하고 다른 링크는 걱정하지 않는 것이 좋을 것 같습니다.
사용자가'/ job/42'와 같은 RESTful URL을 입력 할 수 있지만 응용 프로그램에서'job_wanted.php? jid = 42'로 볼 수있게하려면? –
나는 그것이 내가 원하는 것이라고 생각한다. 기본적으로 사용자가 http : //localhost/jobswehave/job_wanted.php? jid = 42와 같은 링크를 클릭하면 url이 http : // localhost/jobswehave/job/4 – Aaron
음으로 재 작성되고 내 의견과 충돌합니다. ** 어떤 URL 스타일을 사용자가 자신의 URL 표시 줄에 보이게 하시겠습니까? ** –