如何为此编写一个htaccess规则


How to write an htaccess rule for this

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

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

我试过这些规则,但都不起作用。

。htaccess删除查询字符串,保持SEO样式url
使用.htaccess自定义Url或隐藏查询字符串

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

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

将此代码放入您的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,一旦您验证它为您工作

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一样。手册上写着:

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

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