将 url 路径转换为查询字符串,同时使用 .htaccess 保留旧查询字符串

Turn url path into query string while keeping the old query string with .htaccess

基本上,使用 .htaccess,我想从这个 url:

localhost/data/image.jpg?size=400

到这个url:

localhost/image.php?file=data/image.jpg&size=400

我尝试了互联网所能提供的各种不同的东西,但似乎没有任何东西符合我的目的。

我对如何使用.htaccess知之甚少,这使得理解网上的各种答案有点困难。

编辑:我已经试过了,它完成了重定向的一部分

RewriteEngine On
RewriteRule data/(.*) /image.php?file=data/ [PT]

除了它会删除我不想要的 ?size=400

当我尝试输入时

RewriteEngine On
RewriteRule data/(.*)?(.*) /image.php?file=data/&size= [PT]

输出似乎是 localhost/image.php?file=data/image.png%26size=,这是行不通的。

此外,我希望能够在以后的数据中走得更远

根据您展示的示例,请您尝试以下操作。 请在测试您的网址之前清除您的浏览器缓存。

RewriteEngine ON
RewriteCond %{THE_REQUEST} \s/data/(image\.jpg)?(size=\d+)\s [NC]
RewriteRule ^ image.php?file=data/%1&size=%2 [L]

就我个人而言,如果有其他选择,我会尽量避免使用 %{THE_REQUEST}。这里的路径可以被RewriteRule匹配到,所以RewriteCond可以直接看查询字符串内容。

RewriteCond %{QUERY_STRING} ^size=
RewriteRule ^data/(.*) image.php?file=data/ [L,QSA]

QSA 标志使 mod_rewrite 将您正在创建的查询字符串与原始查询字符串合并。

查询字符串的条件可以更精确(或更少)- 取决于您的具体需要。现在,它只是检查查询字符串是否以 size= 开头,而不是更多。

如果你想重定向 所有 /data/image.jpg 请求,无论它们是否有查询字符串,如果有,无论它包含什么- 然后可以完全删除 RewriteCond。如果查询字符串存在,它将通过 QSA 标志合并,如果不存在,则它将包含 您的 file 参数。