2016-02-26 91 views
1

我正在创建一个可以处理多个GET变量并相应输出数据的PHP文件,但是我想删除基础“category”URL元素以缩短它,与htaccess的,就像这样:用PHP重写htaccess多个GET变量的URL基址

http://website.com/news/politics 
http://website.com/videos/funny 
http://website.com/posts/food 

目前我使用不同的文件为每种类型的,但它是一种痛苦:

RewriteRule ^news/([^/]+)/?$ tpl-news.php?slug=$1 [L,QSA,NC] 
RewriteRule ^videos/([^/]+)/?$ tpl-videos.php?slug=$1 [L,QSA,NC] 
RewriteRule ^posts/([^/]+)/?$ tpl-posts.php?slug=$1 [L,QSA,NC] 
etc ... 

或者,我可以使用以下命令:

RewriteRule ^category/([^/]+)/?$ tpl-category.php?type=$1&slug=$2 [L,QSA,NC] 

我不希望有这样一个URL:

http://website.com/category/news/politics 
http://website.com/category/videos/funny 
http://website.com/category/posts/food 

不过想从URL中删除“类别”,像这样:

http://website.com/news/politics 
http://website.com/videos/funny 
http://website.com/posts/food 

但是其他页面/网址为

http://website.com/account/user 
http://website.com/newspost/abcdef // a single post page 
http://website.com/videopost/abcdef // a single video page 

这些“类型”(新闻,视频,帖子,...)有:例如像下面的措施,不应当受此规则影响数量有限,即我没有反对预定那些,以便它们不与页面的其他URL(例如图像文件夹,管理部分,用户简介子页面等)冲突

回答

1

您可以使用此通用规则:

RewriteRule ^(news|videos|post)/([^/]+)/?$ tpl-category.php?type=$1&slug=$2 [L,QSA] 

或者如果您想要使用现有的.php文件,例如tpl-news.phptpl-post.php等再使用:

RewriteRule ^(news|videos|post)/([^/]+)/?$ tpl-$1.php?slug=$2 [L,QSA] 
+0

谢谢@anubhava,它的工作的类别页面,但是现在一些其他的URL被搞砸了该规则。我在上面添加了更多规范,请参阅底部的编辑。 – rainerbrunotte

+0

好的检查更新回答 – anubhava

+1

真棒!奇迹般有效 !非常感谢 ! :) – rainerbrunotte