2017-10-05 41 views
1

使用mod_rewrite 2个GET参数需要从旧的URL重写:如何重写在.htaccess

example.com/search?search_query=SOMEQUERY&search_type=videos&type=public 

example.com/search/videos?search_query=SOMEQUERY&type=public 

回答

1

尝试像靠近你.htaccess文件的顶部如下:

RewriteEngine On 
RewriteCond %{QUERY_STRING} ^search_query=([^&]*)&search_type=(videos)&type=(public)$ 
RewriteRule ^search$ /search/%2?search_query=%1&type=%3 [R,L] 

这与给出的示例URL完全匹配,除了SOMEQUERY是可变的。

%1%2%3和反向引用是对相应的捕获子模式在前述CondPattern。即。 <SOMEQUERY>,videospublic%2%3只是为了保持一致性,并允许您轻松地添加另一个search_type。例如。 search_type=(videos|images)

这是一个临时(302)重定向。如果这意图是永久性的,请将R更改为R=301,但只有在确保工作正常后方可使用。 (301s被浏览器强制缓存,因此可能会使测试出现问题。)

+0

很棒!非常感谢!非常明确,清楚地解释。 查询中的西里尔字母编码还有一个小问题。我们将用php或nginx解决这个问题。祝你好运! –

+1

不客气。如果这回答了您的问题,请将答案标记为“已接受”(箭头下方的复选标记),将其从未答复的问题队列中移除。一旦你有15 +代表,你也可以upvote你认为有用的答案(和其他问题)。非常感谢,谢谢:) – MrWhite