2012-11-18 1 views
2

실제 디렉터리에 디렉터리 슬래시를 추가하는 방법을 알고 있지만 가상 디렉터리에 후행 슬래시를 추가해야합니다. 따라서 사용자가 example.com/website/blog/을 방문 할 때 example.com/website/blog/entries/ 여기htaccess를 사용하여 가상 디렉터리에서 디렉터리 슬래시를 강제 적용

내 현재 작업 htaccess로 코드가 작동합니다 : (이/블로그 &가/항목은 모두 가상 디렉터리 있습니다), URL 주소를 물리적으로 변경됩니다 엔트리 가짜/가상 디렉토리를 PHP 스크립트의 매개 변수로 변환하기 :

RewriteRule ^/?([a-zA-Z_\-/.]+)$ index.php?file=$1 [L,QSA] 

RewriteRule의example.com/website/blog/entries/보기 PHP에 example.com/website/index.php?file=blog/entries/ 같은 단지가 아닌 사용자에게 있습니다. 여기

내가 아무 소용이 함께 작동하도록 시도 다시 쓰기 규칙의 일부입니다 :

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule .*[^/]$ %{REQUEST_URI}$1/ [L,R=301] 

# ----------------------------------------------- 

RewriteCond %{REQUEST_URI} ^(.+)/$ 
RewriteRule ^.+/$ %1 [R=301,L] 

나는 매개 변수에 가상 디렉터리를 변환 내 현재 정규식 시작하는 디렉토리 이름을 찾습니다 때문에 문제가 생각 "/"를 사용하여 사이트가 루트 폴더 ("/")에 설치되어 있지 않거나 슬래시가없는 경우에는 완전히 잘못된 것으로 리디렉션됩니다. 경로가 끊임없이 바뀌기 때문에 폴더 경로를 htaccess 파일의 아무 곳에 나 쓸 수 없습니다. PHP 매개 변수에 가상 디렉터리를 변환 전에

RewriteRule ^(.*)$ http://localhost:8888/project/$1/ [L,R=301] 

실제에 후행 슬래시를 강제 할 수있는 방법이 있나요 및 가상 디렉터리, 예를 들어, 내가 좋아하는 뭔가를 사용할 수 없습니다?

답변

1

다음과 같은 뭔가 당신이 필요로하는 무엇을 수행해야합니다

RewriteEngine On 

# Put here the URL where .htaccess is located 
RewriteBase /project/ 

# Redirect virtual URLs w/o trailing slash to URL with it 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*[^/])$ $1/ [R=301,QSA,L] 

# pass virtual URLs into index.php as file argument 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^/?([a-zA-Z_\-/.]+)$ index.php?file=$1 [L,QSA] 

을 그들이 따라서 리디렉션 index.php를

에 데이터를 전달하기 전에 완료되면, 설정에 나타나는 규칙은 순서대로 처리됩니다

다음은 버전입니다 w/URL의 하드 코딩 된 부분 RewriteBase를 사용 O :

RewriteEngine On 

# Redirect virtual URLs w/o trailing slash to URL with it 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} ^(.*[^/])$ 
RewriteRule .* %1/ [R=301,QSA,L] 

# pass virtual URLs into index.php as file argument 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} ^/?([a-zA-Z_\-/.]+)$ 
RewriteRule .* index.php?file=%1 [L,QSA] 
+0

이 완벽에 가까운, 그리고 내가 정적 디렉터를 사용하지 않도록해야한다를 제외하고, 내 질문에 대한 대답 y 이름. 요청을 통해 .htaccess 파일이있는 디렉토리를 얻는 방법을 알고 있습니까? % {REQUEST_DIR}과 (와) 같이 "/ project /"를 물리적으로 쓰지 않고 디렉토리의 이름을 얻을 수 있습니까? 대답 해줘서 고마워! –

+0

@deraad 업데이트 된 답변보기 하드 코드 된/projects /' –

+0

하드 코드 된/project/"이름을 사용하지 않고 사용해 보았지만 잘못된 위치로 리디렉션되기 때문에 작동하지 않습니다. . 대신 htaccess 파일을 설치 한 사이트의 하위 디렉토리 이름으로 PHP 스크립트를 작성했습니다. –

관련 문제