Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.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
.htaccess URL重写变量名_.htaccess_Url Rewriting - Fatal编程技术网

.htaccess URL重写变量名

.htaccess URL重写变量名,.htaccess,url-rewriting,.htaccess,Url Rewriting,例如,我试图重写URL,以便用新id替换传递的变量 www.domain.com/default.php?s=1&lang=en 改写为: www.domain.com/default.php?id=1$lang=en 正在用id替换s变量 我试过: RewriteEngine on Options +FollowSymlinks RewriteBase / RewriteCond %{QUERY_STRING} ^s=(.+)$ RewriteRule ^s=(.+)$ id=$1 [R,NC

例如,我试图重写URL,以便用新id替换传递的变量

www.domain.com/default.php?s=1&lang=en

改写为:

www.domain.com/default.php?id=1$lang=en

正在用id替换s变量

我试过:

RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteCond %{QUERY_STRING} ^s=(.+)$
RewriteRule ^s=(.+)$ id=$1 [R,NC,L]

没有运气。。。我做错了什么

谢谢你的帮助

试试这个:

RewriteRule ^default.php?s=([0-9]+)&lang=en$ default.php?id=$1&lang=en
编辑。 更通用的版本

RewriteRule ([^?]+)?s=([0-9]+)&lang=([A-z]{2})$ $1?id=$2&lang=$3

即使没有将
s
作为第一个变量,这也应该有效。(不确定您真正想要什么。)


RewriteRule不能像这样处理查询字符串——只能在RewriteCond的帮助下使用。因此,这个规则在ApacheLazyOne中是完全无用的——我总是这样使用它,我知道这不是最好的方法。不过它应该可以工作,至少第一个应该可以。您看到--RewriteRule模式只匹配URL的路径部分--查询字符串必须通过RewriteCond进行匹配。我从未见过它以这种方式工作(除非您安装/启用了一些我不知道的允许这种行为的额外模块)。我调试了很多重写规则(Apache提供了关于它现在正在处理哪些数据的详细信息),我可以清楚地看到查询字符串匹配必须单独完成。几乎——现在这是一种扩展的方法,因为它还将匹配
/default.php?yes=123&lang=en
RewriteRule ([^?]+)?s=([0-9]+)&lang=([A-z]{2})$ $1?id=$2&lang=$3
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{QUERY_STRING} ^(.*&)*s=(.*)(&*)$
RewriteRule ^default.php$ default.php?%1&id=%2%3