2015-10-06 74 views
1

我有这样Apache网址重写保持参数=值

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 

我的目标网址是使URL看起来像这样

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

“我有一个这样的网址”...“,使这个网址看起来像这样 - ”看起来就像你首先需要在你的应用程序中改变网址,使它看起来像那样。你已经做到了吗? (道歉,但我不得不问,因为很多人问同样的问题,没有做这第一步,期待在.htaccess中做所有事情。) – MrWhite

+0

不用担心。在我的PHP中,我生成的URL像fullarticle.php?sID = 3&ssID = 21&id = 1496。我尝试了许多RewriteRules试图使它看起来像fullarticle /新闻/犯罪没有运气。 http://stackoverflow.com/questions/16816342/creating-static-seo-friendly-urls-with-mod-rewrite http://mod-rewrite-cheatsheet.com/ http://statichtml.com/ 2010/mod-rewrite-baseon-on-query-string.html –

+0

(你的PHP应该生成你希望他们看起来对你的用户的格式的URL)。你打算如何转换'/ news/crime'到'sID = 3&ssID = 21'等?你从哪里得到数字ID? – MrWhite

回答

1

您可以尝试RewriteMap将名称映射到数字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 

,然后使用在RewriteRule

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] 

代替txt文件,你也可以使用prgdbd映射。这将允许从程序或SQL select语句中检索名称到ID的映射。有关更多详细信息,请参阅RewriteMap手册。

+0

谢谢奥拉夫。这实际上起作用。然而;这将是很多维护工作。我们的类别,子类别和标题来自数据库并不断添加/更改。 我正在考虑将网址转换成fullarticle/News-3/Crimes-21/title-1496,并从中获取值。我是分离新闻和3,犯罪和21等的过程。再次感谢 –

+0

如果你已经在数据库中,你可以尝试'prg'或'dbd'映射而不是'txt'文件。查看更新的答案。 –

+0

感谢您的时间和建议奥拉夫。我很感激。然而;我需要马上工作。我承诺认为我会考虑prg或dbd,这是目前我的联盟中的主题,但看起来很有希望以备将来参考。 –

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个小时看着办吧。我为自己感到自豪!

+0

你应该接受你自己的答案,这样每个人都可以看到问题已经解决。 –