RewriteRule 无法与 mod_userdir 配合使用

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

使用 mod_userdir,重定向到/home/*/www

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

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-files/css/jquery.qtip.css”未找到,因此看起来是重定向。这是文件的正确路径。

重写日志显示:

(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 标志,结果替换被视为 URL 路径而不是文件系统路径。

添加 RewriteBase 指令使这个工作,但对我来说不是一个令人满意的解决方案,因为我希望它是可移植的。

文档进一步暗示

绕过[PT 标志]的唯一方法是重写为-。

但我无法通过附加来实现这一点

RewriteRule .* - [L]

并从前一条规则中删除 [L]。

答案1

我能够使用RewriteCond并解决这个%{REQUEST_URI}问题,这使我能够重建 URL,而不是将系统文件路径作为 URL 传回。

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

相关内容