.png)
.htaccess를 사용하여 /folder를 /로 리디렉션하려고 하는데 Apache HTTP 서버 테스트 페이지만 표시됩니다. 내 루트 디렉터리는 다음과 같습니다.
/
.htaccess
-/folder
-/folder2
-/folder3
내 .htaccess는 다음과 같습니다.
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/folder/
RewriteRule (.*) /folder/$1
내가 도대체 뭘 잘못하고있는 겁니까? httpd.conf를 확인했는데(Centos를 실행 중입니다) mod_rewrite 라이브러리가 로드되고 있습니다. 참고로 내 서버는 www 서버가 아니며 단순히 가상 머신이므로 호스트 이름은 centosvm입니다.
추가: 내 httpd.conf는 다음과 같습니다:
<VirtualHost *:80>
ServerName taa.local
DocumentRoot /var/www/html
SetEnv APPLICATION_ENV "dev"
Alias /taa /var/www/html/taa/public
<Directory /var/www/html/taa/public>
DirectoryIndex index.php
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
답변1
Mod_Rewrite가 로드되었는지 확인하세요. 루트 디렉터리에 있는지 확인하세요 AllowOverrides All
(Apache 기본값이지만 대부분의 배포판에는 none
httpd.conf 파일에 기본값이 있습니다).
답변2
<VirtualHost>
내 선언에 루트에 대한 선언이 없다는 것을 알았습니다 <Directory>
. 내를 다음으로 변경하면 <VirtualHost
:
<VirtualHost *:80>
ServerName taa.local
DocumentRoot /var/www/html
SetEnv APPLICATION_ENV "dev"
Alias /folder1 /var/www/html/folder1/public
<Directory /var/www/html>
AllowOverride All
Order allow,deny
Allow from all
</Directory>
<Directory /var/www/html/folder1/public>
DirectoryIndex index.php
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
내 /.htaccess는 다음과 같습니다.
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/folder1/
RewriteCond %{REQUEST_URI} !^/folder2/
RewriteCond %{REQUEST_URI} !^/folder3/
RewriteCond %{REQUEST_URI} !^/folder4/
RewriteCond %{REQUEST_URI} !^/folder5/
RewriteRule (.*) folder1/$1 [L]
if 라고 말한 REQUEST_URI = /
다음 리디렉션하는 것이 더 깨끗할 것이지만 방법을 모르겠습니다.
답변3
RewriteCond와의 일치에서 초기 '/'를 삭제해야 합니다.
다음의 예를 참조하세요.http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritecond
RewriteEngine On
RewriteCond %{REQUEST_URI} !^folder/
RewriteRule (.*) /folder/$1