htaccess Mod-rewrite - 从文件名获取查询字符串并转发到 php 文件

htaccess Mod-rewrite - Getting querystring from file name and forward to php file

我创建了一个不错的 php 脚本。我的数据库中有一个用户头像列表,avatar.php?id=xxx 借助 header("Content-Type: image/jpeg").

将该头像输出为图像

我的头像 link 是我的网站。com/avatar.php?id=1。我想在不同的网站上使用这些头像。但是,在大多数网站中,PHP 是不允许的,link 必须以“.jpg”结尾。

所以我想做的是创建一个 ModRewrite 规则。

我可以将 JPG 转换为 PHP,但由于查询字符串,它不会再次以 .jpg 结尾。所以我认为将查询字符串放在文件名中可以​​是一个解决方案

基本上我要转发

mywebsite.com/avatar**54**.jpg
mywebsite.com/avatar**17**.jpg

mywebsite.com/avatar.php?id=54
mywebsite.com/avatar.php?id=17

所以我的头像 links 将以 .jpg 结尾,但它会调用一个 php 脚本,该脚本从数据库中获取具有该 ID 的头像。

我目前在我的 htacess 文件中也有这个,它可以让我隐藏 php 扩展。

RewriteEngine On
RewriteCond %{THE_REQUEST} \s/+(.+)\.php[\s?] [NC]
RewriteRule ^ /%1 [R=302,L,NE]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^\.]+)$ .php [NC,QSA,L]

那么如何在不破坏或干扰我当前的重写规则的情况下实现我想做的事情呢?或者这甚至可能吗?

编辑 1:我尝试了以下但没有用。

RewriteEngine on
RewriteRule ^avatar([^/]*)\.jpg$  /avatar.php?id=  [L]

我找到答案并分享,以防其他人需要它

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^avatar([0-9]+)\.jpg$ avatar.php?id= [L,QSA]

这太棒了!