【问题标题】:.htaccess rewrite imgname.jpg to image.php?img=imgname [closed].htaccess 将 imgname.jpg 重写为 image.php?img=imgname [关闭]
【发布时间】:2012-11-03 14:15:09
【问题描述】:

我正在尝试重写 URL,如下所示:

domain.com/news/12/imgname.jpg

domain.com/image.php?img=12/imgname

我在我的 .htaccess 文件中使用以下内容,但它似乎不起作用:

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^news/([0-9]+\/.*)\.jpg$ image.php?img=$1 [L]

谁能帮我看看我做错了什么?

【问题讨论】:

  • 什么不起作用?您收到错误 500 或类似错误,还是什么都不做?
  • 您正在检查请求是否与 现有文件 匹配,然后再重新写入 - 您的图像是否存储在 wwwroot/NN/imagename.type 中?
  • 它只是不工作。没有重定向。没有错误。
  • 存储在 domain.com/news/[1-99]/someimgname.jpg 中的所有图片
  • 直接调用 domain.com/image.php?img=12/imgname 有效吗?

标签: apache .htaccess mod-rewrite url-rewriting


【解决方案1】:

您不应该转义正斜杠。试试这个:

RewriteRule ^news/([0-9]+/.*)\.jpg$ /image.php?img=$1 [L]

【讨论】:

  • 这应该没什么区别; mod_rewrite 使用 PCRE 正则表达式,其中 /\/ 都匹配正斜杠。
  • 它在htaccess.madewithlove.be 中有效——这并不意味着它适用于所有环境。但是,如果您是对的,那么重写应该会起作用。
  • 请尝试 RewriteRule ^news/([0-9]+)/(.*)\.jpg$ /image.php?img=$1/$2 [L],这绝对可以。如果没有,你有另一种错误。
  • 我之前和现在都试过了,但没有用。
【解决方案2】:

您的 .htaccess 文件是否包含适当的 RewriteBase 指令?如果没有,请在重写规则之前添加以下行:

RewriteBase /

您还应该确保已启用 mod_rewrite 引擎:

RewriteEngine On

【讨论】:

  • 选项 +FollowSymlinks
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^news/([0-9]+/.*)\ .jpg$ /image.php?img=$1 [L]

    RewriteCond %{HTTPS} !=on
    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
    RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]

    选项 -MultiViews

    仍然无法正常工作
  • 好的,不是这样。下一个问题:1)如果您注释掉 RewriteCond,您的重写规则是否有效,以及 2)如果没有,任何重写规则是否真的有效?
  • 将代码粘贴到 cmets 中效果不佳。最好编辑您的问题并在其中包含代码。 (再说一次,在这种情况下,一个简单的“是的,我已经使用RewriteBase /”就足够了。)
  • 好的,谢谢。它仍然无法正常工作,我不明白为什么。它必须有效。
猜你喜欢
  • 2021-04-04
  • 2021-03-22
  • 2012-01-12
  • 1970-01-01
  • 1970-01-01
  • 2012-09-07
  • 2013-07-04
  • 1970-01-01
  • 2013-12-25
相关资源
最近更新 更多