使用.htaccess Mod重写规则将PHP查询URL重写为图像

使用.htaccess Mod重写规则将PHP查询URL重写为图像,php,apache,.htaccess,mod-rewrite,redirect,Php,Apache,.htaccess,Mod Rewrite,Redirect,如何将PHP查询url重写为实际图像 我想要http://localhost/img.php?image=winter.jpg 改写http://localhost/img/winter.jpg 图像名称会动态更改 我试过这样做,但没用 Options +FollowSymlinks RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^.+img\.php\?.*?image\=(.+)[$&] ./img/

如何将PHP查询url重写为实际图像

我想要http://localhost/img.php?image=winter.jpg 改写http://localhost/img/winter.jpg 图像名称会动态更改

我试过这样做,但没用

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.+img\.php\?.*?image\=(.+)[$&] ./img/$1 [NC]
谢谢

[更新]

访问后http://localhost/img.php?image=winter.jpg 以下文本已附加到日志文件中。浏览器显示消息“找不到对象!在此服务器上找不到请求的URL。如果手动输入URL,请检查拼写并重试。”

127.0.0.1---[][localhost/sid#975148][rid#4d09cb8/initial](3)[perdir Z:/xampp/htdocs/]strip per dir前缀:Z:/xampp/htdocs/img.php->img.php
127.0.0.1---[][localhost/sid#975148][rid#4d09cb8/initial](3)[perdir Z:/xampp/htdocs/]将模式“^.+img\.php\?*”image=(.+)[$&]”应用于uri“img.php”
127.0.0.1---[][localhost/sid#975148][rid#4d09cb8/initial](3)[perdir Z:/xampp/htdocs/]pass-through Z:/xampp/htdocs/img.php
[更新]

错误日志显示

[<time>] [error] [client 127.0.0.1] script 'Z:/xampp/htdocs/img.php' not found or unable to stat
[]找不到[错误][客户端127.0.0.1]脚本'Z:/xampp/htdocs/img.php'或无法统计
因此,我创建了一个名为
img.php
的虚拟文件,错误声明不再显示。我假设不需要虚拟文件。现在,当我访问时,它只显示虚拟PHP文件的内容http://localhost/img.php?image=winter.jpg


我尝试了
[NC,L]
[R,NC]
[R,NC,L]
,但都没有成功。

您没有重定向。添加重定向标志,请在末尾尝试
[R]

RewriteRule ^.+img\.php\?.*?image\=(.+)[$&] ./img/$1 [R,NC]
                                                      ^ 

你没有重定向。添加重定向标志,请在末尾尝试
[R]

RewriteRule ^.+img\.php\?.*?image\=(.+)[$&] ./img/$1 [R,NC]
                                                      ^ 

这应该行得通。可能需要重新启动浏览器

RewriteEngine on
RewriteCond %{QUERY_STRING} ^image=(.*)$
RewriteRule ^.*img\.php$ ./img/%1 [NC,QSA]

相关:

这应该是可行的。可能需要重新启动浏览器

RewriteEngine on
RewriteCond %{QUERY_STRING} ^image=(.*)$
RewriteRule ^.*img\.php$ ./img/%1 [NC,QSA]

相关:

谢谢,但当我访问url时,它会显示“未找到对象”。对不起,我可能误用了“重定向”这个词。我只想用一个查询url显示位于img目录中的图像。我不确定什么是正确的短语来描述我的需要。对,那不是HTTP重定向,但你正在重写URL。添加R可能会对您有所帮助,因为它可以使重写变得可见。无论如何,在您的情况下,只需启用重写日志,并将日志中的相关部分添加到您的问题中。
添加R可能会对您有所帮助,
-如果您的意思是
[R,NC]
,它似乎不起作用<代码>只需启用重写日志并将日志中的相关部分添加到您的问题中即可-嗯,我不知道该怎么办。我会尽力的,谢谢日志记录了重写过程中发生的情况。这样,您就可以看到发生了什么(以及发生了什么错误)。感谢您提供有关日志记录的信息。我在
httpd.conf
中添加了
RewriteLog“Z:\xampp\htdocs\rewrite.log”
,并重新启动了Apache。它创建了一个名为rewrite.log的文件,但尽管访问了查询url,但没有记录任何内容。文件大小保持在0 kb。谢谢,但当我访问url时,它会显示“找不到对象”。对不起,我可能误用了“重定向”这个词。我只想用一个查询url显示位于img目录中的图像。我不确定什么是正确的短语来描述我的需要。对,那不是HTTP重定向,但你正在重写URL。添加R可能会对您有所帮助,因为它可以使重写变得可见。无论如何,在您的情况下,只需启用重写日志,并将日志中的相关部分添加到您的问题中。
添加R可能会对您有所帮助,
-如果您的意思是
[R,NC]
,它似乎不起作用<代码>只需启用重写日志并将日志中的相关部分添加到您的问题中即可-嗯,我不知道该怎么办。我会尽力的,谢谢日志记录了重写过程中发生的情况。这样,您就可以看到发生了什么(以及发生了什么错误)。感谢您提供有关日志记录的信息。我在
httpd.conf
中添加了
RewriteLog“Z:\xampp\htdocs\rewrite.log”
,并重新启动了Apache。它创建了一个名为rewrite.log的文件,但尽管访问了查询url,但没有记录任何内容。文件大小保持在0 kb。因此,在完成重写日志后,现在需要查看错误日志(默认情况下,该日志通常已启用)。在该错误日志中,将解释404错误,例如,查找哪个文件。同样从重写日志中,看起来您应该将该规则标记为
[L]
@hakre感谢您的后续操作。我更新了问题。您想阅读以下内容:-URL的查询字符串部分需要特殊处理,您不能在
重写规则中对其进行正则化。基本上404表示URL没有被重写(正则表达式不匹配)。我尝试了
RewriteCond%{QUERY\u STRING}^image=(.*)$RewriteRule^img\.php$./img/%1[NC,L]
,现在浏览器将url重写为
http://localhost/Z:/xampp/htdocs/img/winter.jpg?image=winter.jpg
文件路径和url混合显示。页面显示403错误,并显示一条消息“访问被禁止!”,因此在完成重写日志后,现在需要查看错误日志(默认情况下,该日志通常已启用)。在该错误日志中,将解释404错误,例如,查找哪个文件。同样从重写日志中,看起来您应该将该规则标记为
[L]
@hakre感谢您的后续操作。我更新了问题。您想阅读以下内容:-URL的查询字符串部分需要特殊处理,您不能在
重写规则中对其进行正则化。基本上404表示URL没有被重写(正则表达式不匹配)。我尝试了
RewriteCond%{QUERY\u STRING}^image=(.*)$RewriteRule^img\.php$./img/%1[NC,L]
,现在浏览器将url重写为
http://localhost/Z:/xampp/htdocs