【问题标题】:RewriteCond : if image exist then show it, else generate itRewriteCond :如果图像存在则显示它,否则生成它
【发布时间】:2015-07-31 15:50:07
【问题描述】:

我有一个小的 php 脚本,它为论坛签名生成图像 (GD)。打电话给他们有一个像这样的网址:http://www.example.net/img/imgtype_NN.png

在哪里: - imgtype 是我想要的签名类型 - NN是图片的ID

当我调用这个 url 时,我想测试图像是否已经存在于目录中(即是否已经生成),在这种情况下我想显示它。

否则我希望我的脚本生成它然后显示它。

这是我的实际 .htaccess :

RewriteCond %{REQUEST_URI} img/(.*)_(.*).png$
RewriteCond %{DOCUMENT_ROOT}/signatures/img/%1_%2.png -f
RewriteRule img/(.*)_(.*).png$ /signatures/img/$1_$2.png [L]

RewriteRule img/(.*)_(.*).png /signatures/signatures.php?signature=$1&id_pop=$2 [L]

图像存储在 example.com/signatures/img/ 中,php 脚本位于 example.com/signatures/signatures.php

经过数小时的尝试,我没有完全得到我需要的东西,现在我放弃了,我需要一些帮助。

谢谢大家!

【问题讨论】:

  • 我不得不将规则移到 Wordpress 之前,因为他已经在检查现有文件(并重定向到 index.php)。所以现在它可以工作了。谢谢贾斯汀!

标签: php regex .htaccess mod-rewrite


【解决方案1】:

嗯,你的代码不是最好的,所以你的问题可能是由于一些语法错误。
不管怎样,你可以试试这个版本(把这段代码放在你的 root htaccess 中)

RewriteEngine On

RewriteCond %{DOCUMENT_ROOT}/signatures/img/$1_$2\.png -f
RewriteRule ^img/(.+)_(.+)\.png$ /signatures/img/$1_$2.png [L]

RewriteRule ^img/(.+)_(.+)\.png$ /signatures/signatures.php?signature=$1&id_pop=$2 [L]

确保您已启用 mod_rewrite 并在 Apache 配置中允许 htaccess

【讨论】:

  • 实际上我的代码工作... 50% 的时间。我试过你的,但我不明白为什么第一个 RewriteCond 现在不见了。 (%{REQUEST_URI})。使用此代码,它根本不起作用 :)
  • REQUEST_URI 在这里没用,因为您已经在 RewriteRule 中匹配了它。我真的很惊讶您的代码随机运行(50% 的时间),这非常奇怪。你有工作和不工作的网址示例吗?另外,您的 htaccess 在根文件夹中吗?你有其他规则吗?你在其他子文件夹中有其他 htaccess 文件吗?
  • 请注意,请求的 url 是 /img/___.png 但文件位于 /signatures/img/ 这就是我添加 %REQUEST_URI 的原因。没有有效的网址和其他无效的网址,但是当我 F5 相同的网址时,有时它有时无效。
  • 是的,这就是我的规则正在做的事情(实际上就像你的规则一样)。对我来说,这更像是一个缓存问题。您是否有机会使用 Nginx ?另外,您没有回答我的问题:您的 htaccess 在根文件夹中吗? mod_rewrite 是否启用并允许 htaccess (apache config) ?最重要的是,您的 htaccess 中是否还有其他规则?或子文件夹中的其他 htaccess ?
  • 对不起。 .htaccess 位于根文件夹中(它是一个 Wordpress)并激活了重写 mod 并允许 htaccess(其他规则运行良好)。子文件夹中没有其他 htacces。我正在使用 Apache(带有 Varnish)
猜你喜欢
  • 2015-07-17
  • 2021-11-19
  • 1970-01-01
  • 1970-01-01
  • 2012-07-23
  • 2018-05-26
  • 2013-05-27
  • 2014-07-20
  • 2018-03-16
相关资源
最近更新 更多