2013-05-04 4 views
1

을 제외하고 나는이처럼 보이는 내 사이트의 루트에 일반적인 재 작성 규칙이있다 : "www.example.com/myAction 같은 URL을 다시 쓰기 위해 잘 작동htaccess로-재 작성하지만, 하위 디렉토리

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([\w]+)/?([\w]+)? index.php?action=$1 

"~"www.example.com/index.php?action=myAction "

이렇게해야합니다.하지만 하위 디렉토리 ("/ 로그인 ")를 다시 작성하지 않아야합니다.

그래서 시도 :

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !^/login/ 
RewriteRule ^([\w]+)/?([\w]+)? index.php?action=$1 

하지만 여전히 행운을. 나는 여기에 몇 가지 답변을 읽었지만 결함을 찾을 수 없습니다. 어떤 아이디어? 고맙습니다!

답변

5

당신은 여분의 슬래시를했습니다. .htaccessVirtual Host과는 달리 앞의 슬래시를 사용하지 않습니다. 또한 /login/은 디렉토리입니다. 따라서 실제 파일이 아닌 실제 디렉토리 일 수있는 모든 항목을 일치시킵니다. 예를 들어 '/ css /'가있는 경우 요청에 따라 action을 index.php에 다시 작성합니다.

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !^login/ 
RewriteRule ^([^/]+) index.php?action=$1 

여전히 당신은 당신이 기존의 디렉토리를 재 작성하지 않을 있는지 확인해야합니다 시도가 예기치 않게 수도 행동이라면이 :

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !^login/ 
RewriteRule ^([^/]+) index.php?action=$1 

나는 또한 당신이 첫 번째 슬래시까지 캡처있는 것으로 나타났습니다 (가능하다면) ? 룩업을 사용하고 있기 때문에 게시 된 예제 코드로, 아마도 이전 코드의 레이아웃을 약간 더 짧게 보여줄 것입니다. 전체를 캡처하려면 URI이를 사용합니다 :

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !^login/ 
RewriteRule ^(.*) index.php?action=$1 

두 번째 (와 세 번째) 문자열을 캡처하려면이 같은 일을 할 수 있습니다

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !^login/ 
RewriteRule ^([^/]+)/([^/]+)/([^/]+) index.php?action=$1&page=$2&response=$3 
0

당신이 작동합니다,하지만 당신은 다른 방법 대신에 통과 /login/에 대한 모든 요청을하려고 할 수있는 일 :

RewriteEngine On 

RewriteRule ^login/? - [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([\w]+)/?([\w]+)? index.php?action=$1