htaccess正则表达式短语中的问题

时间:2011-07-05 09:59:57

标签: .htaccess

我想转换此网址:

module-apple-get.html?term=st

file.php?module=apple&func=get&term=st

我在.htaccess文件中写了这段代码:

RewriteRule ^module-apple-get\.html?term=([^-]+)$ file.php?module=apple&func=get&term=$1 [L,NC,NS]

但它不起作用。这是错的吗?

1 个答案:

答案 0 :(得分:1)

RewriteRule指令不能直接使用查询字符串,因此您的规则永远不会起作用。

以下几种方法。

1)如果请求/module-apple-get.html,则会执行重写,并将现有查询字符串附加到新网址。这意味着,如果您请求/module-apple-get.html?term=st&some=another_param,则会将其重写为file.php?module=apple&func=get&term=st&some=another_param。这是一种更安全和推荐的方法。

RewriteRule ^module-apple-get\.html$ file.php?module=apple&func=get [QSA,L]

2)另一种方法是,只有在请求的网址为term=st时才会重写:现在:

RewriteCond %{QUERY_STRING} (^|&)term=st
RewriteRule ^module-apple-get\.html$ file.php?module=apple&func=get&term=st [L]

如果您请求/module-apple-get.html?term=st,则会重写,但如果您请求/module-apple-get.html?some=another_param则不会重写。

3)另一种方法是仅在WHOLE请求的URL匹配时重写:

RewriteCond %{QUERY_STRING} ^term=st$
RewriteRule ^module-apple-get\.html$ file.php?module=apple&func=get&term=st [L]

如果您请求/module-apple-get.html?term=st,则会重写,但如果您请求/module-apple-get.html?term=st&some=another_param则不会重写。

<强> P.S。

  1. 您可以根据需要添加任何其他标记([NC][NS]等。)
  2. 您可能需要在/之前添加前导斜杠file.php(取决于您的设置,此.htaccess所在的位置等)