Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将url路径转换为查询字符串,同时将旧查询字符串保留为.htaccess_.htaccess_Url_Redirect_Query String - Fatal编程技术网

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

将url路径转换为查询字符串,同时将旧查询字符串保留为.htaccess,.htaccess,url,redirect,query-string,.htaccess,Url,Redirect,Query String,基本上,使用.htaccess,我想从以下url开始: localhost/data/image.jpg?size=400 要访问此url,请执行以下操作: localhost/image.php?file=data/image.jpg&size=400 我试着从互联网上得到各种各样的东西,但似乎没有任何东西符合我的目的 我对如何使用.htaccess知之甚少,这使得在线理解各种答案有点困难 编辑:我已经尝试过了,这是重定向的一部分 RewriteEngine On RewriteRule da

基本上,使用.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/$1 [PT]
除了删除我不想要的
?size=400

当我试着打字的时候

RewriteEngine On
RewriteRule data/(.*)?(.*) /image.php?file=data/$1&size=$2 [PT]
输出似乎是
localhost/image.php?file=data/image.png%26size=
,这根本不起作用


另外,我希望能够进一步了解您展示的样本,而不仅仅是数据/稍后,请您尝试以下内容。 请在测试URL之前清除浏览器缓存

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/$1 [L,QSA]
QSA
标志使mod_rewrite将您正在创建的查询字符串与原始字符串合并

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


如果您想重定向所有
/data/image.jpg
请求,不管它们是否有查询字符串,如果它们有查询字符串,不管它包含什么,那么可以完全删除RewriteCond。如果存在一个查询字符串,它将通过
QSA
标志合并,如果不存在,那么它将只包含您的
文件
参数。

欢迎这样做,请在您尝试过的问题中添加您的htaccess文件,谢谢。您能尝试这样的操作吗,
RewriteCond%{query\u string}^size=
重写规则^data/(*)image.php?file=data/$1[L,QSA]
如果需要,查询字符串的条件可以更加具体,或者如果您还想重写
/data/image.jpg
,也可以完全省略。QSA标志将原始查询字符串与新查询字符串合并。@CBroe这已经解决了它!非常感谢。你可以把它写成一个实际的答案,我会验证它:D-如果我想使用数据以外的东西,我可以简单地写
RewriteRule^(.*)image.php?file=$1[L,QSA]
,在这种情况下你必须小心,因为模式
^(.*)
也会匹配
image.php
,所以这可以很容易地创建一个循环。我应该写一些东西来代替%{THE_REQUEST}吗?@TotoShampoin,是的,我们应该使用它,让我知道它是如何运行的。我不知道用什么来代替%{THE_REQUEST},但它显然不适用于%{REQUEST_URI},也不适用于%{QUERY STRING}。。。我可能在这里遗漏了什么。@TotoShampoin,这是在我的本地测试的,您能告诉我您在这里点击的是哪一个示例URL吗?在调试.htaccess网站上,它说在这两种情况下,第2行的重写条件与查询不匹配(localhost/image.jpg?size=400)