【发布时间】:2017-04-15 04:06:54
【问题描述】:
我在 .htaccess 文件中写了这条规则:
# Rewrite super sized ciim5 images to large
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ciim5/([0-9]+)/([0-9]+)/super_000000\.jpg$ /ciim5/$1/$2/large_000000.jpg [NC,L,R=301]
它应该做的是当请求路径/ciim5/123/456/super_000000.jpg时,它应该301重定向到相同的路径,而是提供large_000000.jpg。 super_0000000.jpg 和 large_000000.jpg 都是该服务器上的实际物理文件(实际上我们希望对公共隐藏超大尺寸图像并将它们重定向到大图像)
我已经在我的本地主机 (Apache/2.4.7 (Ubuntu)) 上尝试了这个规则并且它有效(.htaccess 文件的其余部分与生产文件相同)。但是当我将它上传到生产服务器(Apache/2.4.18(Ubuntu))时,它根本没有做任何事情。但是以前存在的重写确实有效(= mod_rewrite 已启用)。我确保 .htaccess 文件已在生产站点上更新(确实如此),甚至制作了一个 test.html 文件并在浏览器中打开它,以确保我将文件上传到正确的目录中。
我现在坐在这里摸不着头脑,谁能告诉我为什么上述方法在生产服务器上不起作用以及如何让它进行重定向?
编辑:
路径/ciim5 实际上设置为不在网络根目录中的目录的别名。那么这可能是网络根目录中的 .htaccess 文件未被读取的情况吗?我应该把 .htaccess 文件放在 /ciim5 目录中吗?
编辑 2: 启用日志显示:
[Thu Dec 01 10:05:48.444800 2016] [rewrite:trace1] [pid 4572] mod_rewrite.c(476): [client *:33116] * - - [*.org.uk/sid#7f767fb185c8][rid#7f767fa9c0a0/initial] pass through /ciim5/295/491/super_000000.jpg
[Thu Dec 01 10:05:48.445015 2016] [rewrite:trace3] [pid 4572] mod_rewrite.c(476): [client *:33116] * - - [*.org.uk/sid#7f767fb185c8][rid#7f767fa9c0a0/initial] [perdir /static-media/] strip per-dir prefix: /static-media/295/491/super_000000.jpg -> 295/491/super_000000.jpg
[Thu Dec 01 10:05:48.445113 2016] [rewrite:trace3] [pid 4572] mod_rewrite.c(476): [client *:33116] * - - [*.org.uk/sid#7f767fb185c8][rid#7f767fa9c0a0/initial] [perdir /static-media/] applying pattern '^(ciim5/[0-9]+/[0-9]+/)super_000000\\.jpg$' to uri '295/491/super_000000.jpg'
[Thu Dec 01 10:05:48.445204 2016] [rewrite:trace1] [pid 4572] mod_rewrite.c(476): [client *:33116] * - - [*.org.uk/sid#7f767fb185c8][rid#7f767fa9c0a0/initial] [perdir /static-media/] pass through /static-media/295/491/super_000000.jpg
这个“strip per-dir prefix”是什么?似乎它删除了 ciim5 或 static-media (ciim5 别名的实际文件夹)。所以我实际上应该从我的重写器中删除ciim5 部分?
【问题讨论】:
-
检查重写模块的调试日志 (LogLevel)。在两台服务器上。你发现有什么不同吗?
-
@DavidDuponchel 检查编辑 2,谢谢!
标签: apache .htaccess redirect mod-rewrite