使用.htaccess将“虚拟文件夹”重定向到私人文件夹

时间:2011-12-15 14:51:08

标签: apache mod-rewrite

我无法理解重写规则。我试了几个,但似乎都没有。

我在root / private / images /中有一个文件夹,我希望使用http://website/private_images/访问该文件夹。我的网站是从root / public /提供的,应该是.htaccess文件的位置。

我想要这样的东西(这不起作用):

RewriteRule private_images/(.*) ../private/images/$1

2 个答案:

答案 0 :(得分:2)

这应该有效,因为我正在做类似你做的事情,并且它在我的网站上完美运行(尚未发布,但很遗憾,你看不到它)。

我是这样做的:

# ...test if file exists in partner dir :
RewriteCond %{DOCUMENT_ROOT}/../partnerdir/%{REQUEST_FILENAME}  -f
# file exists => rewrite + end :
RewriteRule  (.*) %{DOCUMENT_ROOT}/../mypath/%{REQUEST_FILENAME} [QSA,L]

告诉我它是否有效。

两个提示:


请尝试使用RewriteLog指令:它可以帮助您找出此类问题:

# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On

我最喜欢检查regexp的工具:

http://www.quanetic.com/Regex(别忘了选择ereg(POSIX)而不是preg(PCRE)!)

我可以请你在你的问题中添加重写吗?

答案 1 :(得分:0)

我认为这不起作用的原因是Apache将第二个参数解释为URL,但它无法解析相对于您网站根目录的../

处理此设置的正确方法是放置行

Alias /private_images /path/to/root/private/images
<Directory /path/to/root/private/images>
    Order allow,deny
    Allow from all
</Directory>

在虚拟主机配置中。

如果您无权访问虚拟主机配置,则可以输入

RewriteRule /private_images(/.*) /path/to/root/private/images$1

.htaccess文件中。