如何为此编写htaccess规则

时间:2014-07-23 07:36:07

标签: php regex apache .htaccess

我是htaccess规则的新手,我发现很难编写一个htaccess规则来转换

http://www.frontieragturf.com/category.php?cat_id=1

http://www.frontieragturf.com/category/1

我已经尝试过这些规则但是没有用。

.htaccess remove query string, keeping SEO style url
Customize Url or Hide Query String using .htaccess

RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} "cat_id=" [NC]
RewriteRule (.*)  /$1? [R=302,L]

我写了这个,但删除了整个查询字符串,包括1个 像这样http://www.frontieragturf.com/category.php

2 个答案:

答案 0 :(得分:0)

RewriteEngine On
RewriteCond %{REQUEST_URI} ^category\.php$
RewriteCond %{QUERY_STRING} ^cat_id=(\d+)$ [NC]
RewriteRule .* /category/%1? [R=302,L]

此处,%1指的是上一个RewriteCond的第一个匹配组,而$ 1表示此RewriteRule中的第一个匹配组,如RewriteRule (.*) /category/$1manual说:

  

RewriteCond反向引用:这些是%N形式的反向引用(0 <= N <= 9)。 %1到%9提供对模式的分组部分(同样,在括号中)的访问,从当前条件集中的最后匹配的RewriteCond。 %0提供对该模式匹配的整个字符串的访问。

最后?会终止原始查询字符串。如果没有它,将重复查找重定向的查询:它将是/category/1?cat_id=1,而OP需要/category/1

答案 1 :(得分:0)

将此代码放在DOCUMENT_ROOT/.htaccess文件中:

RewriteEngine On
RewriteBase /

RewriteCond %{THE_REQUEST} \s/+category\.php\?cat_id=([^\s&]+) [NC]
RewriteRule ^ category/%1? [R=302,L]

RewriteRule ^category/([^/.]+)/?$ category.php?cat_id=$1 [L,QSA,NC]

一旦您确认它正在为您工作,请将302更改为301