我正在使用.htaccess
和mod_rewrite
指向位于DocumentRoot后面的文件。我的文件夹结构如下所示:
home/
webroot/
other_files/
我在webroot中有一个.htaccess
文件,其中包含以下内容:
RewriteEngine on RewriteRule ^(.*)$ /home/other_files/$1
如果我尝试访问http://example.com/file.html,则会收到以下错误:
在此服务器上找不到请求的URL /home/other_files/file.html。
甚至可以加载DocumentRoot后面的文件吗?如果是这样,有人能指出我正确的方向吗?
答案 0 :(得分:13)
我相信您需要添加
部分<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>
然后,您可以重写URL以转至/ doc /,服务器将知道从何处获取文件。
答案 1 :(得分:0)
只是你知道为什么这个规则不起作用:
它无法重写为/home/other\_files/file.html
的原因是mod_rewrite正在将路径解析为/home/webroot/home/other\_files/file.html
,因为从mod_rewrite的角度来看,前面的斜杠与{{1}的文档根同等。 1}}。
Ryan Ahearn's suggestion是一个体面的,很可能是你想去的路线。
答案 2 :(得分:0)
归功于Ryan Aheam,但我要拼出来。我是初学者,即使有了Ryan的回答,我也必须尝试一些方法才能使语法正确。
我希望我的DocumentRoot成为我的cakephp目录。但后来我有一个Mantis Bug跟踪器,它只是普通的php,所以不在cakephp目录中。下面的文件我有以下工作。
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>