我是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
答案 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/$1
。 manual说:
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
。