我正在尝试使
RewriteRule
重定向到服务器上当前目录之外的绝对路径。这在 PHP 中正确实现时有效(即没有权限问题),但对于 .htaccess
,它不会:
RewriteEngine On
RewriteRule ^files/(.*)$ /var/www/files/html/$2
不过,这是一个例子。想象一下这个 .htaccess 文件位于
/var/www/downloads/html
并重定向到其他位置。就像我说的,这是一个例子,在这种情况下没有意义。
我认为这可能不起作用,因为它重定向到
/var/www/files/html/var/www/downloads/html
。
问题: 如何让RewriteRule指向当前目录之外的目录?
更新:该站点的虚拟主机是:
<VirtualHost *:80>
ServerName subdomain.domain.com
DocumentRoot /var/www/files/html
</VirtualHost>
您可以将
DocumentRoot
更改为 /var/www
并将您的 .htaccess 放在那里。规则可能看起来像
RewriteRule ^files/(.*)$ /downloads/html/$1
但是,
/var/www
以下的所有内容都将公开访问。如果这不是一个选项(例如安全问题),您必须坚持使用您的 PHP 解决方案。
在 ServerConfiguration 中为指定的 VHost 添加 RewriteRules,你会看到它起作用了。这似乎是 mod_rewrite 或 Apache 中的一项安全功能。如果规则是在目录上下文(.htaccess 文件)中定义的,则不能在 DocumentRoot 之外设置路径。在这种情况下,路径替换将有所不同。