【问题标题】:Apache .htaccess redirect fileApache .htaccess 重定向文件
【发布时间】: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.jpgsuper_0000000.jpglarge_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


【解决方案1】:

所以这就是我必须做的:

我的 webroot 位于 /var/www/*.org.uk。但媒体文件位于根目录的/static-media 中。我必须在/static-media 中放入一个.htaccess 文件并放入以下指令:

RewriteRule ^([0-9]+/[0-9]+/)super_000000\.jpg$ /ciim5/$1large_000000.jpg [NC,L,R=301]

似乎当请求来到 Apache 时,strip per-dir prefix(我不知道这是什么!)似乎删除了 /static-media 和 /ciim5 目录前缀,所以传入的请求(比如说/ciim5/123/456/super_000000.jpg ) /static-media 接收的 .htaccess 文件是:/123/456/super_000000.jpg。所以现在我需要将它重定向到相同的路径,但带有 /ciim5 前缀和 large_000000.jpg。这实际上是通过反复试验完成的,我不完全理解为什么会这样工作。所以请扩展这个答案。

【讨论】:

    猜你喜欢
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 2013-07-17
    • 2019-02-02
    相关资源
    最近更新 更多