Chapter: htaccess 配置能力4. 改写URL的查询字符串Q

查询字符串是指URL请求中“问号”后头的部门。好比,?foo=bar中粗体部门就是查询字符串,个中变量名是foo,值是bar。

1. 操作QSA转换查询字符串QUERY_STRING

QSA符号( Query String Appending)用于在URI中截取查询字符串,这个截取操纵是通过小括号正则表达式实现的:

1   RewriteEngine On  

2   RewriteRule /pages/(.+) /page.php?page=$1 [QSA]  

将会把请求/pages/123?one=two 映射到 /page.php?page=123&one=two

留意粗体部门险些是沟通的,除了“问号”酿成了“与”标记

假如没有QSA符号,那么会映射到/page.php?page=123

假如没有用到小括号正则表达式,就不需要QSA,这在上面一个小节中已经例证过了。

小括号正则表达式可以截取查询字符串中的内容,可是假如没有开启QSA符号,那么在/page.php?page=$1中“问号”之后将会被剥离扬弃。这种特性可以用于实现“剥离查询字符串”

通过QSA,我们可以将简朴链接/simple/flat/link/ 映射成 server-side.php?first-var=flat&second-var=link

1   RewriteEngine On  

2   RewriteRule ^/([^/]+)/([^/]+)/? /index.php?first-var=$1&second-var=$2 [QSA]  

2. 操作RewriteCond改写查询字符串QUERY_STRING

1   RewriteEngine On  

2   RewriteCond %{QUERY_STRING} foo=(.*)  

3   RewriteRule ^grab(.*) /page.php?bar=%1  

该法则将会见请求grab?foo=bar转换为page.php?bar=bar

RewriteCond用于捕捉查询字符串(QUERY_STRING)中变量foo的值,并存储在%1

QUERY_STRING是Apache界说的“变量=值”向量(数组)

3. QSA与RewriteCond双剑齐发

1   RewriteEngine On  

2   RewriteCond %{QUERY_STRING} foo=(.+)  

3   RewriteRule ^grab/(.*) /%1/index.php?file=$1 [QSA]  

会把/grab/foobar.zip?level=5&foo=bar 映射到 /bar/index.php?file=foobar.zip&level=5&foo=bar

转换后根目次是bar目次

foobar.zip?level=5中的“问号”酿成了foobar.zip&level=5中的“与”标记

4. 剥离查询字符串

只需在要开始剥离的链接后头加个“问号”,而且不要启用QSA符号,就可剥离查询字符串。

1   RewriteEngine On  

2   # Whatever QS is  

3   RewriteCond %{QUERY_STRING} .  

4   # I don't want it with Question mark  

5   RewriteRule foo.php(.*) /foo.php? [L]  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/7714.html