2013-06-21 1 views
0

그래서, :마지막 노드가 디렉토리 일 경우 .htaccess를 작성하여 색인을 제공하는 방법, 그렇지 않으면 파일을 제공합니까? 나는 다음과 같은 URL이있는 경우

http://www.example.com/Foo/Bar/Drink/

(이 경우, 음료로) URL의 마지막 노드는 하나의 디렉토리가, 어떤 경우에는 내가 index.php를 제공 할 것입니다 또는 "Drink.php"라는 파일이되며,이 경우 해당 파일을 제공하고 싶습니다.

http://www.example.com/은 분명 index.php를 제공합니다.

두 가지 모두 "예쁜 URL"모양을 후행 슬래시로 유지합니다.

이것이 가능합니까? 이 사이트는 일관되게이 형식을 따를 것이고 모든 것을 기본 색인 파일을 통해 라우팅하지 않아도되도록 노력하고 있습니다.

+0

가장 쉬운 방법은 index.php가 포함 된 Drink 디렉토리를 사용하는 것입니까? – DPM

답변

1

장소는 사이트

Options -MultiViews 
RewriteEngine ON  

RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule (.+) /$1/index.php [QSA,L] 

RewriteCond %{DOCUMENT_ROOT}/$1.php -f 
RewriteRule ^(.+?)/?$ /$1.php [QSA,L] 
+0

이것은 동적이므로 index.php를 실제로 디렉토리가 될 때마다 가져 오지만 파일 일 때는 색인 파일 내의 디렉토리로 들어가는 것처럼 금지되어 있습니다. – Tealstone

+0

우리 기관이 우리 웹 사이트에 이러한 웹 폴더 중 일부를 마운트하기 때문에 몇 가지 문제가있는 것처럼 보입니다 ... 색인이 제공되기 때문에 첫 번째 재 작성 조건 및 규칙이 필요하지 않은 것처럼 보입니다. 거기에 또 다른 규칙을 추가하여 후행 슬래시를 추가했습니다. 여기에 최종 제품이 있습니다. 고마워, 아민! 옵션 -MultiViews # ON 한다 RewriteEngine 슬래시를 한다 RewriteCond % {REQUEST_URI} (/ $. | \) 뒤에 추가! 한다 RewriteRule을 (. *) % {REQUEST_URI}/[R = 301, L] 의 #if 그것은 파일이고, 파일을 제공합니다. RewriteCond % {DOCUMENT_ROOT}/$ 1.php -f RewriteRule^(. +?) /? $ /$1.php [QSA, L] – Tealstone

+0

다행 이네요, upvote도 멋지 네요 :) –

0

의 루트 디렉토리 아래의 .htaccess에서이 코드는 내가 재 작성 규칙이 트릭을 할 것 같아요. 다음과 같이 시도하십시오 :

Options +FollowSymLinks 
DirectoryIndex index.php 

RewriteEngine On 
RewriteBase /Foo/Bar/Drink 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /Foo/Bar/Drink HTTP/ 
RewriteRule ^Drink.php$ http://www.yourdomain.com/Foo/Bar/Drink [R=301,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /Foo/Bar/Drink/Drink.php [L]