繁体   English   中英

用Apache mod_rewrite重写查询字符串的一部分

[英]Rewrite part of query string with apache mod_rewrite

在使用mod_rewrite重写部分查询字符串时需要帮助。

浏览了大量资源,对东西的工作原理有一个总体了解,但无法找出正确的解决方案

该链接:

http://example.com/?param=home&shop_id=1000005620&ate=bow&b_uid=-1&tg=one

必须成为这个

http://example.com/?param=home/#/shop/1000005620?ate=bow&b_uid=-1&tg=one


如果更短,则这部分查询字符串

&shop_id=1000005620&转换为/#/shop/1000005620?


更新:

回答使我清楚地了解了我必须做什么。 解决我的问题的确切规则是这样的:

<IfModule mod_rewrite.c>
    RewriteCond %{QUERY_STRING} ^(.*)&shop_id=([0-9]{10,12})(?:&)(.*)$
    RewriteRule ^(.*)$ https://%{SERVER_NAME}/$1?%1/#/shop/%2\?%3 [NE,L,R]
</IfModule>

<IfModule mod_rewrite.c>
    RewriteCond %{QUERY_STRING} ^shop_id=([0-9]{10,12})$
    RewriteRule ^(.*)$ https://%{SERVER_NAME}/#/shop/%1? [NE,L,R]
</IfModule>

该重写规则的原因是使用safari进行哈希处理,即,我具有外部页面使用的链接,并且如果站点请求http,也可以重定向到https。 如果链接中有哈希,并且从Safari发送了请求,则IE哈希将离开URL,并且在重定向后不会返回。 我想指出一个非常重要的事实,即使在重定向到https之后,Chrome和Firefox在保留带有哈希值的URL方面也没有问题。 这涉及到重建我们的URL,但这是值得的,现在一切都按预期进行。

你可以试试:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^(.*)&shop_id=([^&]+)&?(.*)$
RewriteRule ^(.*)$ /$1?%1/#shop_id=%2?%3 [L,R,NE]

编辑:

如果我只将http://example.com/?shop_id=1000005620重写为http://example.com/#/shop/1000005620 ,该怎么办?

只需更改正则表达式模式的相关部分:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^shop_id=([^&]+)$
RewriteRule ^(.*)$ /$1/#shop_id=%2? [L,R,NE]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM