如何从apache重写规则中的特定$ _GET变量中排除匹配的值?

时间:2016-03-11 03:07:15

标签: regex apache .htaccess rewrite

我试图省略" $ main_page ="的$ _GET变量的某些值。在apache重写规则中。例如:

我有一些我想要重写的网址,例如:

http://example.com/index.php?main_page=faq
http://example.com/index.php?main_page=login
http://example.com/index.php?main_page=contact_us

成为:

http://example.com/faq
http://example.com/login
http://example.com/contact_us

我能够通过以下方式实现这一目标:

  RewriteCond %{QUERY_STRING} main_page=(.*)
  RewriteRule ^index\.php$ %1? [R=302,L]

但是,我还想省略"?main_page ="的某些值。来自重写规则,例如:

http://example.com/index.php?main_page=index    
http://example.com/index.php?main_page=page&id=2
http://example.com/index.php?main_page=advanced_search&search_in_description=1&keyword=cialis&inc_subcat=0
http://example.com/index.php?main_page=product_info&cPath=1&products_id=27

所以我尝试了类似的东西:

  RewriteEngine on
  Options -MultiViews
  RewriteCond %{QUERY_STRING} main_page=(?!product_info)(?!page)(?!index)(?!advanced_search)
  RewriteRule ^index\.php$ %1? [R=302,L]

但没有运气。我在regx重写方面表现不佳。我希望这是我犯的一个小错误。有人可以提供一些帮助吗?非常感谢。

1 个答案:

答案 0 :(得分:1)

要取消多个键值,您可以使用:

  RewriteCond %{QUERY_STRING} main_page=((?!index|product_info|page|foo|bar).*)
  RewriteRule ^index\.php$ %1? [R=302,L]