나는 여기 벽을 거의 쳤다. 내가 알 수있는 한, 이것이 효과가 있지만 그렇지 않습니다.Apache RewriteRule 및 논리 건너 뛰기
로컬 개발 주소에 * .localhost의 와일드 카드 하위 도메인과/[0-9]/somestring의 친숙한 URL이 있습니다. 내가하려는 일은 username.localhost/1/page
에서 localhost?pageId=1&username=username
사이입니다. 이 문제는 username.localhost의 홈페이지와 username.localhost/1/page와 같은 개별 페이지를 모두 얻으려고 시도 할 때 발생합니다.
RewriteRule ^([0-9]+)/[a-zA-Z0-9\-\_\,\.]+$ - [S=1]
RewriteCond %{HTTP_HOST} !^www.* [NC]
RewriteCond %{HTTP_HOST} ^([^\.]+)\.localhost
RewriteRule ^index.php$ index.php?username=%1
RewriteRule ^([0-9]+)/[a-zA-Z0-9\-\_\,\.]+$ index.php?pageId=$1&username=%1
/1/페이지 페이지를 사용하면 첫 번째 규칙은 일치 및 건너 뛰기를 건너 뛰지 만 올바르게 다시 쓰지 못합니다. 그러나 처음 두 규칙을 제거하면/1/페이지 페이지를 다시 작성합니다.
마치 건너 뛰지 않은 것처럼 보이지만 아직 S = 2로 변경하면 두 규칙이 모두 건너 뜁니다. 아하. 어떤 아이디어?
답변 해 주셔서 감사합니다. 규칙을 두 번째 실행하면 전체적으로 렌치를 던질 수있는 논리를 볼 수 있습니다. 미안하지만 조금 밀도가 높습니다. 그러나 솔루션으로 어떻게 해결되는지 따라갈 수 없습니다. REQUEST_FILENAME은 항상 존재하게 될 index.php로 나오며, 결과적으로 이것을 시도하는 것은 꺼내지 않는 것 같습니다. –
@Zurahn - 'http : // username.localhost /'에 대한 요청은 도메인 다음에 요청 경로가 없기 때문에'/ website/root/dir /'의 초기 '% {REQUEST_FILENAME}'을 갖습니다. 이것은 파일이 아니므로'! -f' 조건은 첫 번째 패스에서 true입니다.후속 패스 ('RewriteRule' 때문에이 경우'DirectoryIndex'가 적용된 경우에도 마찬가지 임)에서'% {REQUEST_FILENAME} '은'/ website/root/dir/index.php'가됩니다. 조건이 실패하여 실수로 첫 번째 재 작성을 다시 수행하지 못하게하는 파일입니다. –
모든 도움에 감사드립니다. 당신이 제공 한 것을 가지고 일할 것이고 그것을 관리 할 수 있어야한다고 생각합니다. –