2012-08-10 2 views
1

mod_rewrite를 사용하는 데 어려움을 겪고 있습니다. 나는 약 1 시간의 인터넷 검색을하고 있었지만 아무 것도 작동하지 않는 것으로 보인다. 내가 뭘 원하는 example.com/species
및 example.com/species/frog로도
example.com/species.php?name=frog에 변화
example.com/species.php입니다. 내가 example.com/species/frog로 표시 example.com/species.php?name=frog을 얻을 수 있고,Mod_Rewrite to/subdirectory// subdirectory/query

RewriteRule ^species/ /species.php 

와 내가 예를 얻을 수

Options +FollowSymlinks 
RewriteEngine on 

RewriteRule ^species/(.*)$ /species.php?name=$1 

를 사용

.com/species.php를 example.com/species/로 표시 할 수는 있지만 동시에 둘 다 작업 할 수는 없습니다.
또한 후행 슬래시가없는 example.com/species는 항상 404로 표시됩니다.
나는 어떤 문제를 잡기 위해/species/디렉토리를 만든다고 생각했지만 차라리 한 종에 대해 몇 가지 규칙을 사용하고 싶습니다. .php 파일. 어떤 도움이라도 기꺼이 감사 할 것입니다! (나는 8 시간 이상 내 자신의 질문에 대답 할 수 없기 때문에)

편집 :

나는 내 문제를 모두 해결 한 것으로 보인다. 두 번째 RewriteRule의 성공적 동시에 작동 다른한다 RewriteRule을 유지하면서 example.com/species.php하는 example.com/species를 리디렉션

Options +FollowSymlinks 
RewriteEngine on 

RewriteRule ^species/(.*)$ /species.php?name=$1 
RewriteRule ^species/?$ /species.php 

: 나는 내 htaccess로 변경.
그러나 example.com/species/에 후행 슬래시를 입력하면 example.com/species.php?name=으로 읽히고 이름이 제출되지 않아 오류가 발생하므로

을 추가했습니다.
if(isset($_GET['name']) && empty($_GET['name'])) {header('location: http://example.com/species');} 

그래서 example.com/species/를 사용하면/species로 리디렉션되어 원하는대로 작동합니다.

답변

1

첫 번째 RewriteRule의에 + (일치 하나 또는 그 이상)에 * (경기 0 개 이상)를 변경하는 경우 후행 슬래시를 사용하는 경우 다음 species.php?name=을보고 중지해야합니다.

이것은 +에 슬래시 뒤에 무언가가 표시되어야하기 때문입니다. 그렇지 않으면 규칙이 일치하지 않습니다. 두 번째 RewriteRule은 슬래시 (/)로 끝나기 때문에 일치하지만 대상 URL에 name= 쿼리 문자열을 추가하지 않습니다.

첫 번째 규칙과 일치하는 경우 두 번째 규칙을 실행할 필요가 없기 때문에 첫 번째 규칙 뒤에() 플래그를 추가 할 수도 있습니다. (이가한다 RewriteCond을 멈추지 않을 것입니다 및 RewriteRule의 테스트는 다른 모든 요청처럼 htaccess로 파일을 통해 이동해야합니다 리디렉션 결과 URL에서 실행되고 있습니다.)

가 참조 Reference Documentation for mod_rewrite in Apache 2.4 (나에 대한 문서를 볼 수 실제로 사용중인 Apache 버전).