为什么这个重写规则不会被捕获?

时间:2014-08-19 20:34:03

标签: apache .htaccess mod-rewrite

我有一个使用绝对路径的大量资产的网站,即:

<img src=\"/_files/images/shell/logo.jpg\">

我的问题是,此网站的开发网址为:http://arraybox.net/~hazelwoodconstru/

不幸的是,这意味着它正试图访问arraybox.net/_files/images/shell/logo.jpg而非arraybox.net/~hazelwoodconstru/_files/images/shell/logo.jpg

的文件

我正在尝试使用.htaccess RewriteRule处理此问题。

RewriteRule /_files/(.*) /~hazelwoodconstru/_files/$1 [R,NC,L]

我让它在某个时刻工作,但我搞砸了它,现在它已经坏了,我无法弄明白为什么!

修改

我在此.htaccess中也有以下内容,可能会或可能不会干扰:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !404\.shtml|500\.shtml|favicon\.ico|index\.php{1}
RewriteRule (.*) /~hazelwoodconstru/ [QSA,L]

2 个答案:

答案 0 :(得分:0)

您需要使规则的匹配更严格,并删除前导斜杠:

RewriteRule ^_files/ /~hazelwoodconstru/%{REQUEST_URI} [L,R]

如果您不想要外部重定向,请删除,R标记。

答案 1 :(得分:0)

似乎正在发生的事情是,普通的绝对文件路径不会使用arraybox.net/~hazelwoodconstru/filepath - 它们会直接转到arraybox.net/filepath。在主目录arraybox.net上编写.htaccess对我来说不起作用,因为会有多个站点使用这个设置,并且没有办法告诉资产真正存在哪个/ home /目录。

我选择的解决方案:

我没有使用用户目录arraybox.net/~hazelwoodconstru,而是设置了一个子域名 hazelwood.arraybox.net

然后我编辑了vhosts配置,将此子域的文档根目录更改为指向/ home / hazelwoodconstru目录(我还必须更改用户)。

此外,我必须修改vhosts.local以更改phpopenbasedirprotect以使用documentroot。然后我不得不在/ home /目录中添加allow from all

它现在在子域工作。