我想转换此网址:
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]
但它不起作用。这是错的吗?
答案 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。强>
[NC]
,[NS]
等。)/
之前添加前导斜杠file.php
(取决于您的设置,此.htaccess所在的位置等)