2013-04-28 4 views
1

mod_rewrite에 문제가 있습니다.mod_rewrite/foo to /index.php?id=foo AND/foo/foo2 to /index.php?id=foo/foo2

해당 URI를 제목으로 리디렉션하고 싶습니다. 내가 폴더에있는 모든 자원을 넣을 경우에만 작동

RewriteEngine on 

RewriteCond $1 !^(folders not to be redirected e.g. css|images) 
RewriteCond $1 !^(.*).(file extension e.g. png|css|txt|php) 

RewriteRule ^(.*)$ index.php?id=$1 [L] 

다음 규칙을 사용하여 다른 사람이 나에게 말할 것 : 그래서

"/foo/index.php" not found. 

를 해결하기 위해 나는 폴더에 모든 자원을 넣어 "www"

하지만 리소스를 하위 폴더 (예 : 심지어 "/ foo는 /에서는 foo2"또는 "/ foo는 /에서는 foo2/foo3"와 같은 하위 폴더에서

The requested URL "/foo/foo2" was not found on this server. 

어떻게로드 할 수있는 자원 "푸"그것은 나에게 말한다?

그리고 폴더의 index.php 자동 검색 문제를 어떻게 해결할 수 있습니까?

답변

1

다음 결과를 사용하여 원하는 결과를 얻을 수 있다고 생각합니다. 파일 확장명으로 필터링하지 않고 파일이 실제로 존재하는지 확인합니다. 한 가지 다른 점은 처음에는 링크에 후행 슬래시를 추가한다는 점입니다. 원하지 않을 수도 있습니다. 당신이 미행 슬래시를 원하지 않는 경우

RewriteEngine on 
RewriteBase/

# This appends a trailing slash. You will have to update http://so with your domain. 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !(.*)/$ 
RewriteRule ^(.*)$ http://so/$1/ [L,R=301] 

# This does the internal redirect 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)/$ /index.php?id=$1 [L] 

, 당신은 당신 말이 맞아 다음

RewriteEngine on 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ /index.php?id=$1 [L] 
+0

사용할 수 있습니다. 나는 그 끝에 못생긴 후행 슬래시를 추가하고 싶지 않습니다. 그러나 그것들을 제거하거나 그것들을 없애고 재 작성하는 방법은 무엇입니까? –

+0

@JuliusRickert, 후행 슬래시가없는 다른 옵션을 추가했습니다. –

+0

"[NC]"는 필요하지 않지만 "[L]"이 있어야한다고 생각합니다. 내가 맞습니까? –