하위 폴더에 대한 각 요청을 동일한 폴더의 index.php로 리디렉션하려면 어떻게 해야 합니까?
myserver.com/folder/subfolder1/test redirected to folder/subfolder1/index.php
myserver.com/folder/subfolder2/test redirected to folder/subfolder2/index.php
...
다음과 같이 각 하위 폴더에 .htaccess를 추가했습니다.
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php [L,QSA]
상위 폴더에 하나의 .htaccess를 사용하여 리디렉션하고 싶습니다.
Folder/
.htaccess <-- one redirection here
subfolder1/
index.php
subfolder2/
index.php
subfolder3/
index.php
...
subfolder n /
index.php
추신: 모든 하위 폴더는 서로 다른 이름을 가지며 명명 규칙을 따르지 않습니다.
답변1
DirectoryIndex
루트 파일에 올바르게 설정되어 있는지 확인하기만 하면 됩니다 .htaccess
. (기본값은 입니다 index.html
. 많은 배포판 index.php
에도 포함되어 있으므로 아무 것도 할 필요가 없는 경우가 많습니다!)
예를 들어:
DirectoryIndex index.php
index.php
이는 디렉토리를 직접 요청할 때 요청된 디렉토리(상대 URL 경로 참고)에서 파일을 찾도록 Apache(mod_dir)에 지시합니다 .
문서 DirectoryIndex
(예: index.php
)를 찾을 수 없으면 403 Forbidden이 표시됩니다(mod_autoindex가 활성화되고 디렉토리 목록이 비활성화된 것으로 가정 Options -Indexes
).
더 이상 추가해야 할 것은 없습니다. (실제로 "외부 리디렉션"을 원하지 않는 한?!)
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^.*$ index.php [L,QSA]
mod_rewrite를 사용할 필요는 없습니다. 사실 이 규칙은 여기서는 아무 것도 하지 않습니다.상태디렉터리에 대한 요청을 명시적으로 제외합니다.
참조:
답변2
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.+)/.*$ $1/index.php [L,QSA]
나는 답을 찾았습니다. 이 규칙을 사용하면 파일이 존재하지 않으면 모든 폴더가 index.php로 리디렉션됩니다.