apache url使用多个参数重写keep parameter = value

时间:2015-10-06 16:09:56

标签: php apache .htaccess mod-rewrite

我有这样的网址

fullarticle.php?sID=3&ssID=21&id=1496
sID = category (Forums, entertaiment, news, sports etc)
ssID = sub category (businnes, health, crime, etc)
id = article id

我的目标是让这个网址看起来像这样

fullarticle/News/Crimes/title

我在.htaccess尝试了这个:

RewriteRule ^([^/]+)/([^/]+)/([^\.]+)/([^\.]+)/([^\.]+)/([^\.]+)$ fullarticle.php?$1=$2&$3=$4&$5=$6 [L,NC,QSA]
另一个

RewriteRule ^/([a-zA-Z\+]+)/([a-zA-Z\+\-]+)/([0-9]+)$ fullarticle.php?sID=3&ssID=21&id=1496

还有一些没有运气。

我如何编写规则/条件来实现这一目标?如果有更简单的方法,我愿意接受建议。

感谢您抽出宝贵时间来研究这个问题。

2 个答案:

答案 0 :(得分:1)

您可以尝试cppreference从名称映射到数字ID。但这需要在之前设置这样的地图,例如

categories.txt中:

news 1
sports 2
entertainement 3

subcategories.txt:

crime 11
baseball 21
football 22
movie 31

TITLES.TXT:

rewrite-rules-solved 83
stackoverflow-rocks 77
you-are-the-greatest 27

然后在RewriteMap

中使用它
RewriteMap cat "txt:/path/to/categories.txt"
RewriteMap sub "txt:/path/to/subcategories.txt"
RewriteMap title "txt:/path/to/titles.txt"

RewriteRule ^/(.*?)/(.*?)/(.*)$ fullarticle.php?sID=${cat:$1}&ssID=${sub:$2}&id=${title:$3} [L]

您还可以使用RewriteRuleprg映射,而不是txt个文件。这将允许从程序或SQL select语句中检索名称到id映射。有关详细信息,请参阅RewriteMap手册。

答案 1 :(得分:0)

我最终做的是构建我的动态网址:

fullarticle/3/21/1496/title.html

其中3 =类别,21 =子类别,1496 =标题ID

我的重写看起来像这样:

RewriteRule ^fullarticle/([^/]+)/([^/]+)/([^\.]+)/([a-zA-Z0-9-]+).html$ fullarticle.php?sID=$1&ssID=$2&id=$3 [L,NC,QSA]

我是新手,我花了6个小时才搞清楚。我为自己感到自豪!