我需要从网址中删除查询字符串
site.com/somepage?p1=something1&p2=something2&..pn=somethingn
并将其变成类似:
site.com/somepage/something1/something2/../somethingn
我已经尝试过了,但是它不适合我要达到的目标。
RewriteCond %{QUERY_STRING} ^(.*)lang=([a-z]{2})&?(.*)$
RewriteRule (.*) /%2/$1?%1%3 [R=307]
同样在传递带有空格的值时,我需要将其重写为'-',但我不知道该怎么做
我在Ubuntu 16.04上使用apache 2.4
由于参数的数量在您的情况下似乎是“无限的”,因此您可以创建一个循环来重写它们:
RewriteCond %{QUERY_STRING} ^[^&=]+=([^&]+)&?(.*)$
RewriteRule ^(somepage)(/.+[^/])?$ /$1$2/%1?%2 [R=301,L]
这将如下工作:
1) http://domain.tld/somepage?p1=something1&p2=something2&pn=somethingn
2) http://domain.tld/somepage/something1?p2=something2&pn=somethingn
3) http://domain.tld/somepage/something1/something2?pn=somethingn
4) http://domain.tld/somepage/something1/something2/somethingn
我没有注意到您的第二个要求是when passing a value with spaces in the string, I need to rewrite it to '-'
。为此,您可以将其与其他规则结合使用,例如:
RewriteCond %{QUERY_STRING} ^(.+?)(?:\s|%20)(.+)$
RewriteRule ^(.*)$ /$1?%1-%2 [R=301,L]
RewriteCond %{QUERY_STRING} ^[^&=]+=([^&]+)&?(.*)$
RewriteRule ^(somepage)(/.+[^/])?$ /$1$2/%1?%2 [R=301,L]
N
越高(查询字符串中的空格越多),重定向次数就越高。
假设原始网址是http://domain.tld/somepage?p1=some thing1&p2=some%20thing2&pn=somethingn
(是否已编码空格)。在这种情况下,它将如下工作:
http://domain.tld/somepage?p1=some thing1&p2=some%20thing2&pn=somethingn
http://domain.tld/somepage?p1=some-thing1&p2=some%20thing2&pn=somethingn
http://domain.tld/somepage?p1=some-thing1&p2=some-thing2&pn=somethingn
http://domain.tld/somepage/some-thing1?p2=some-thing2&pn=somethingn
http://domain.tld/somepage/some-thing1/some-thing2?pn=somethingn
http://domain.tld/somepage/some-thing1/some-thing2/somethingn