DocumentRoot 뒤에 파일을 로드하는 Mod-Rewrite
-
08-06-2019 - |
문제
나는 사용하고있다 .htaccess
그리고 mod_rewrite
DocumentRoot 뒤에 있는 파일을 가리킵니다.내 폴더 구조는 다음과 같습니다.
home/
webroot/
other_files/
나는 .htaccess
다음 내용을 포함하는 webroot의 파일:
RewriteEngine on RewriteRule ^(.*)$ /home/other_files/$1
내가 접근하려고 하면 http://example.com/file.html 다음 오류가 발생합니다.
요청한 URL /home/other_files/file.html을 이 서버에서 찾을 수 없습니다.
DocumentRoot 뒤에 있는 파일을 로드하는 것도 가능합니까?그렇다면 누군가 나에게 올바른 방향을 알려줄 수 있습니까?
해결책
나는 당신이 섹션을 추가해야한다고 생각합니다
<Directory "/home/other_files">
(options)
</Directory>
Apache가 서버 구성에서 무엇이든 제공할 수 있기 전에 서버 구성에 추가하세요.예를 들어 내 DocumentRoot는 /var/www이지만 기본 사용 가능한 사이트에는 다음 섹션이 있습니다.
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
그런 다음 /doc/로 이동하기 위해 URL을 다시 작성할 수 있으며 서버는 파일을 어디서 가져올 수 있는지 알 수 있습니다.
다른 팁
해당 규칙이 작동하지 않는 이유를 알아보세요.
다시 쓸 수 없는 이유 /home/other\_files/file.html
mod_rewrite가 경로를 다음과 같이 구문 분석한다는 것입니다. /home/webroot/home/other\_files/file.html
mod_rewrite의 관점에서 앞의 슬래시는 문서 루트와 동일하므로 /home/webroot
.
Ryan Ahearn의 제안 괜찮은 경로이고 아마도 당신이 가고 싶은 경로일 것입니다.
크레딧은 Ryan Aheam에게 있지만 철자를 설명하겠습니다.저는 초보자이고 Ryan의 답변에도 불구하고 구문을 올바르게 만들기 위해 몇 가지 실험을 해야 했습니다.
내 DocumentRoot가 내 cakephp 디렉토리가 되기를 원했습니다.하지만 나는 일반적인 PHP이고 cakephp 디렉토리에는 없는 Mantis Bug 추적기를 갖고 있었습니다.아래 파일은 다음과 같이 작동합니다.
http://www.my_website.com :/var/www/cakephp에서 제공
http://www.my_website.com/mantisbt :/var/www/html/mantisbt에서 제공
파일 /etc/httpd/conf/httpd.conf
Alias /mantisbt/ "/var/www/html/mantisbt/"
<Directory "/var/www/html/">
AllowOverride All
</Directory>
<VirtualHost *:80>
ServerAdmin me@my_email.com
DocumentRoot /var/www/cakephp
ServerName my_website.com
<Directory /var/www/cakephp/>
AllowOverride All
</Directory>
</VirtualHost>
파일 /var/www/cakephp/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^mantisbt/?$ /mantisbt/ [NC,L]
RewriteRule ^$ webroot/ [L]
RewriteRule (.*) webroot/$1 [L]
</IfModule>