我的设置:
- 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]