RewriteRule不能使用mod_userdir

我的设置:

  • Ubuntu 13.04
  • Apache / 2.2.22(Ubuntu)
  • PHP 5.4.9-4ubuntu2.2

$ ls /etc/apache2/mods-enabled/*.load alias.load auth_basic.load authn_file.load authz_default.load authz_groupfile.load authz_host.load authz_user.load autoindex.load cgi.load deflate.load dir.load env.load expires.load mime.load negotiation.load php5.load reqtimeout.load rewrite.load setenvif.load status.load userdir.load 

使用redirect到/home/*/www mod_userdir

/home/*/www/styles有一个.htaccess文件,其中包含以下指令:

 RewriteEngine On RewriteRule (styles-files/.+)\.(\d{10})\.(\w{2,4})$ $1.$3 [L] 

现在这里是令人困惑的部分(个人信息蒙上了阴影)

加载http://localhost/~***/styles/styles-files/css/jquery.qtip.css可以正常工作(文件显示在浏览器中)

加载http://localhost/~***/styles/styles-files/css/jquery.qtip.1376640525.css给我404错误,但消息说“/ home / *** / www / styles / styles-文件/ css / jquery.qtip.css“没有find,所以它看起来是redirect。 这是该文件的正确path。

重写日志显示:

 (3) [perdir /home/***/www/styles/] strip per-dir prefix: /home/***/www/styles/styles-files/css/jquery.qtip.1376640525.css -> styles-files/css/jquery.qtip.1376640525.css (3) [perdir /home/***/www/styles/] applying pattern '(styles-files/.+)\\.(\\d{10})\\.(\\w{2,4})$' to uri 'styles-files/css/jquery.qtip.1376640525.css' (2) [perdir /home/***/www/styles/] rewrite 'styles-files/css/jquery.qtip.1376640525.css' -> 'styles-files/css/jquery.qtip.css' (3) [perdir /home/***/www/styles/] add per-dir prefix: styles-files/css/jquery.qtip.css -> /home/***/www/styles/styles-files/css/jquery.qtip.css (1) [perdir /home/***/www/styles/] internal redirect with /home/***/www/styles/styles-files/css/jquery.qtip.css [INTERNAL REDIRECT] 

但之后,Apache就会抛出一个错误

 [error] [client 127.0.0.1] File does not exist: /var/www/home 

如果我把所有的东西都移到/var/www ,重写就能正常工作。 似乎mod_rewrite和mod_userdir之间有某种冲突,但是我在网上找不到任何东西。

有关可能发生的事情的任何想法,以及如何解决这个问题?


经过一番阅读后,我意识到,因为RewriteRule在.htaccess文件中,由于隐含的PT标志,所以产生的replace被视为URLpath而不是文件系统path。

添加一个RewriteBase指令使这个工作,但不是一个令人满意的解决scheme,因为我想这是可移植的。

文件进一步暗示

规避PT标志的唯一方法是重写为 – 。

但是我一直无法通过追加来实现

 RewriteRule .* - [L] 

并从前面的规则中删除[L]。

我能够使用RewriteCond%{REQUEST_URI}来解决这个问题,它允许我重buildURL而不是将系统文件path作为URL传回。

 RewriteEngine On RewriteCond %{REQUEST_URI} ^(/.*?)styles-files/ RewriteRule (styles-files/.+)\.(\d{10})\.(\w{2,4})$ %1$1.$3 [PT]