我无法理解重写规则。我试了几个,但似乎都没有。
我在root / private / images /中有一个文件夹,我希望使用http://website/private_images/访问该文件夹。我的网站是从root / public /提供的,应该是.htaccess文件的位置。
我想要这样的东西(这不起作用):
RewriteRule private_images/(.*) ../private/images/$1
答案 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
文件中。