.htaccess URL重写变量名
例如,我试图重写URL,以便用新id替换传递的变量.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
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