2017-12-04 3 views
0

내 Controller로 연결되는 모든 URL에 index.php를 포함 할 필요가 없도록 CodeIgniter 설치 루트에 .htaccess 파일을 적용하려고합니다. 당신이 볼 수 있듯이.htaccess - DirectoryIndex가 효과가없는 것으로 나타납니다.

<IfModule authz_core_module> 
    Require all granted 
</IfModule> 
<IfModule !authz_core_module> 
    Deny from all 
</IfModule> 

DirectoryIndex login.php 

RewriteEngine On 
RewriteCond $1 !^(index\.php) 
RewriteCond $(REQUEST_FILENAME) !-f 
RewriteCond $(REQUEST_FILENAME) !-d 
RewriteRule ^(.*)$ ./index.php/$1 

, 그것은 mod_rewrite를하고 여기에 추가 된 DirectoryIndex에 지시어에 대한 몇 가지 재 작성 규칙과 기본 htaccess로 파일입니다 :

이 내 htaccess로 파일의 내용이다. Mod_rewrite가 활성화되어 있습니다 (apachectl -M을 사용하여 이것을 확인했습니다).

이제 우분투 16.04 LTS에서 Apache 2.4.18을 실행 중이며 CodeIgniter 3.1.6을 사용하고 있습니다. 문제는 URL을 입력 할 때 원하는 login.php 대신 CodeIgniters index.php로 리디렉션된다는 것입니다. 오히려 DirectoryIndex 지시어를 login.php의 내용을 index.php로 옮기는 대신 명확한 이유로 DirectoryIndex 지시어를 사용하고 싶습니다. 내 mod_rewrite 규칙은 URL에 index.php를 포함 할 필요없이 URL을 기존 파일 "index.php"로 라우팅하도록되어 있습니다. 이렇게하면 URL이 더 깨끗하지만 CodeIgniter의 기능을 계속 사용할 수 있습니다.

내 마스터 아파치 설정은 분명히 CodeIgniter가 필요하기 때문에 .htaccess 파일을 사용할 수있게 해주고 URL 재 작성 지시문은 정상적으로 작동합니다. 왜 DirectoryIndex는 파일 내부에 상관없이 아무 것도하지 않는 것 같습니다.

답변

0

AllowOverride 명령어가 All으로 설정되어 있는지 확인하십시오.이 명령어는 .htaccess 파일에 전원이 공급되는지 여부를 제어합니다.

그것을 설정하는 방법에 대한 답변이 있습니다 How to Set AllowOverride all

0

내가 아니라 우아한 방법으로 문제를 해결.

DocumentRoot의 하위 디렉토리에있는 .htaccess 파일에서 mod_rewrite를 사용하면 올바르게 작동하지 않습니다.

내 CodeIgniter 설치가 DocumentRoot 내부에 "CodeIgniter"라는 하위 디렉토리에 있습니다.

을 DocumentRoot/htaccess로 : 저는 두 .htaccess 파일을 만들어

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %1 !^index.php 
RewriteRule ^(.*)$ /CodeIgniter/index.php [L] 

을 DocumentRoot/CodeIgniter의/htaccess로 :

이 나를

의 트릭을 수행 할 것으로 보인다

<IfModule authz_core_module> 
    Require all granted 
</IfModule> 
<IfModule !authz_core_module> 
    Deny from all 
</IfModule> 
Options FollowSymLinks 
DirectoryIndex login.php 

이야기의 도덕 :.에있는 .htaccess에 mod_rewrite를 사용하여 귀하의 모든 URL 재 작성을 직접 수행하십시오.DocumentRoot의