2013-08-30 3 views
0

나는 웹에서 2 시간 동안 튼튼한 검색을 해왔다.PHP APACHE URL 다시 쓰기

존재하지 않는 폴더로 리디렉션 한 다음이를 쿼리 문자열 (예 : "domain.com/test/"로 연결되는 앵커 태그)로 변환하려고합니다. 그러나 .htaccess가이를 가로 채고 변경해야합니다. "domain.com/index.php?p=test"검색어 문자열을 보는 사용자가없는 커튼 뒤에

내가 잘못하고있는 것이 확실하지 않지만 Google에서 거의 모든 것을 시도했습니다 - 페이지 1 적어도 두 가지 : P

도움을 주시면 대단히 감사하겠습니다.

+0

가능한 복제본 [PHP apache url rewrite] (http://stackoverflow.com/questions/1750884/php-apache-url-rewrite) – bizzehdee

답변

1

mod_rewrite에는 요청 된 URL이 파일인지 디렉토리인지를 테스트 할 수있는 속성 테스트가 있습니다. the documentation을 참조하십시오.

RewriteCond을 사용하면 %{REQUEST_FILENAME}을 테스트 할 수 있습니다. 그런 다음 URL을 리디렉션하거나 내부적으로 다시 쓸 수 있습니다. 리디렉션을 사용하면 클라이언트의 URL이 눈에 띄게 변경되지만 내부 리디렉션은 실제로 URL을 변경하지 않고 다른 페이지 만 표시합니다.

#The requested url is NOT a directory AND NOT a file 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php?p=$1 [L] 

외부 리디렉션이 발생하도록하려면 R -flag를 추가하십시오. R=301 플래그는 리디렉션을 영구적으로 만들지 만 작동하도록 모든 규칙이 작동하면 영구적으로 만 리디렉션합니다.

+0

좋아요. 시도해 보았습니다./Test/p/Home에 갈 수 있습니다. 그리고 비슷하게 모든 상대적인 링크는 물론 SQL 함수처럼 손상됩니다 - 그래서 나는 이것을 정확하게 좋아하는지 확신하지 못합니다 ... 추신./Test는 내 도메인 루트에있는 폴더입니다 URL에 "http : // localhost : 8888/Test/Home"을 표시하고 싶지만 PHP는 http : // localhost : 8888/Test /? p = 집 –

+0

'RewriteBase/Test /'를 사용해보십시오. mod_rewrite는 페이지의 링크를 변경하지 않으므로 상대 링크가 손상된 경우 다른 내용을 변경해야합니다. – Sumurai8

+0

좋아요. 잘 작동합니다. 내가 시도한 것처럼/p/home을 사용하지 않아야했습니다 ... 사용하는 것을 탐지하는 방법이 있습니까? 그래서 예. ? p = 집은/집으로 가고/새로 고침 = 213124123은/새로 고침/213124123으로 갈 것입니까? 또는 무엇인가? 기본적으로 어떤 쿼리 문자열이 있는지 감지합니다 : –