2011-01-24 4 views
1
내 URL을 내가 원하는

mod_rewrite를 삭제 하위 폴더와 PHP

root.com/sub/?page=home

root.com/home

까지 갈 수 있도록 할

하위 폴더를 제거하려면 PHP를 제거하고 가장 기본적인 URL을 그대로 두십시오. 또한 가능하다면 모든 non 'root.com/[*]'를 다시 root.com으로 리디렉션하고 싶습니다. 예를 들어 'root.com/home/index.php?page=home'및 'root.com/sub/test/'는 모두 'root.com'으로 리디렉션됩니다.

RewriteEngine On 
#remove subfolder, WORKS 
RewriteCond %{HTTP_HOST} ^root\.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www\.root\.com$ 
RewriteCond %{REQUEST_URI} !^/sub/ 
RewriteRule (.*) /sub/$1 [L] 

이 작동하고 하위 폴더

#remove PHP, not working :S 
RewriteRule ^([a-zA-Z0-9_-]+)$ /index.php?page=$1 [L] 
RewriteRule ^([a-zA-Z0-9_-]+)/$ /index.php?page=$1 [L] 

을 제거하지만이 작업과 '잎되지 않습니다

htaccess로와 mod_rewrite는 지금까지 내가이 가지고있는 가장 좋은 방법 것 같다 ? page = home 'ect 메신저 두 번째 규칙에 대한 정규식 전에 뭔가를 놓친 것 같아요,하지만 메신저 새로.

미리 감사드립니다.

편집 : [L] 일을 고려하면 여전히 주사위가 없습니다.

필자는 추측하여 다음과 같이 별도의 반복 작업을 수행 할 필요가 있다고 생각합니다.

+0

범프/난 또 다른 문제를 발견 난 내 컴퓨터에서 사이트를 볼 때 (첫 번째 부분)은 'www.root.com/page'로 표시되지만 내 동료 컴퓨터에서는 'www.root.com/sub/page'로 표시됩니다. – Neros

답변

0

mod_write의 문제는 대개 충돌로 인해 발생합니다. 이 경우 두 번째 블록은 첫 번째 블록 appword afterword와 일치하여 무한 루프 또는 500 오류를 생성합니다.

모든 RewriteRule[L] 플래그를 추가해야합니다. 예 : [L]없이

RewriteEngine On 
#remove subfolder 
RewriteCond %{HTTP_HOST} ^root\.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www\.root\.com$ 
RewriteCond %{REQUEST_URI} !^/sub/ 
RewriteRule (.*) /sub/$1 [L] 

#remove PHP 
RewriteRule ^([a-zA-Z0-9_-]+)$ /index.php?page=$1 [L] 
RewriteRule ^([a-zA-Z0-9_-]+)/$ /index.php?page=$1 [L] 

, /abc/index.php?page=abc에 다시되며, 그 /sub//index.php?page=abc에 다시 것입니다.

나는 이것이 문제가 될 것이라고 75 % 확신하지만, 테스트를 거치지 않아서 내기를하지 않을 것입니다. 시도 해보지 마십시오.

+0

나는 그것을 줬다. 그러나 나는 아직도 "www.root.com/?page=home"과 같은 url을 얻는다. 그래서 하위 폴더는 사라졌지 만 PHP는 여전히 주위에있다. – Neros

0

가이 규칙은 문제가 내가 생각된다

RewriteRule (.*) /sub/$1 [L]

가로 변경합니다 :

RewriteRule (.*) /sub/index.php?page=$1 [L]

+0

(다른 변형들 사이에서)이 주사는 그것은 작동합니다 : S – Neros