2009-12-01 9 views
0

mod-rewrite를 사용하면 이렇게 할 수 있습니까?짧은 URL의 경우 Apache mod-rewrite

현재 URL :

 
www.example.com/Departments/dynamicPage.php?DeptID=10&DeptName=HR 

이 때문에 재 설정할 수 :

 
www.example.com/hr 

합니다 (인수) 위의 리디렉션 할 수 있습니까?

루트 수준에서 "hr"폴더를 만들고 메타 새로 고침과 함께 html 페이지를 넣을 수는 있지만 여분의 혼란은 싫어.

나는 .htaccess 301이 가능하지 않다고 생각하지만, 틀렸다면 나를 교정 해주십시오. 나는 미래의 인스턴스를 위해 추가 할 수있는 우아한 솔루션을 찾고있다.

+0

아래의 mod-rewrite 지시문은 Apache 구성의 디렉토리에 "AllowOverride FileInfo"가 설정되어있는 한 .htaccess 파일에서 작동합니다. http://httpd.apache.org/docs/2.2/mod/ core.html # allowover –

답변

0
RewriteEngine On 
RewriteRule ^hr$ Departments/dynamicPage.php?DeptID=10&DeptName=HR [R=301] 
+0

^hr $이 ... com/hr /과 같이 루트를 벗어났습니다. ..com/this/that/theother/hr/ 과 같은 다른 중첩 디렉토리가있는 경우 리디렉션됩니다. ??? – Don

+1

정규 표현식의 시작 부분에있는'^'는 문자열의 시작 (이 경우에는 URL)과 일치하기 위해 다음 시퀀스를 필요로합니다. 정규 표현식의 끝에있는'$ '는 이전 시퀀스가 ​​문자열의 끝과 일치하도록 요구합니다. '^ hr $'는 "hr"인 문자열에만 일치합니다. –

2

합리적인 것 같습니다. 당신이 일반적인 확인하려면

RewriteRule ^hr$ /Departments/dynamicPage.php?DeptID=10&DeptName=HR [L] 

:이의 라인을 따라 뭔가 트릭을 할해야 물론

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ /Departments/dynamicPage.php?DeptID=10&DeptName=$1 [L] 

, 당신은 '사람들이 어떤 돈 부서로 향하고에 대해 신중해야 실제로 존재하기 때문에 모든 DeptNames가 의미가 있는지 확인해야합니다.

301 리디렉션을 원할 경우 다시 쓰기 규칙의 끝에 [R=301] 또는 [L,R=301]을 사용하십시오.

+1

DeptID = 10 URL에 있기 때문에 제네릭 솔루션이 제대로 작동하지 않을 수 있습니다. –

+1

좋은 지적. 중복 된 정보 중 하나가 더 많은 문제점이 있습니다. 그것은 아마 모두 도루 될 수 있습니다. –