HTACCESS:如何简化我的RewriteRule

时间:2012-07-23 13:33:24

标签: php .htaccess mod-rewrite

我正在制作我网站的照片部分,在选择要查看的图片时,您可以使用不同的导航菜单来获取您想要的内容(最新,趋势,朋友,收藏等),还可以对其进行排序图片按日期,评级,观点等。

哦,还有一个分页系统,我用它只在一页上显示几张图片。

现在我有了这个:

RewriteRule ^photo$ photo.php?tab=latest
RewriteRule ^photo/trending$ photo.php?tab=trending
RewriteRule ^photo/friends$ photo.php?tab=friends
RewriteRule ^photo/favorite$ photo.php?tab=favorite

RewriteRule ^photo/page:([0-9]+)/$ photo.php?tab=latest&page=$1
RewriteRule ^photo/trending/page:([0-9]+)/$ photo.php?tab=trending&page=$1
RewriteRule ^photo/friends/page:([0-9]+)/$ photo.php?tab=friends&page=$1
RewriteRule ^photo/favorite/page:([0-9]+)/$ photo.php?tab=favorite&page=$1

RewriteRule ^photo/sort:([A-Za-z0-9]+)/page:([0-9]+)/$ photo.php?tab=latest&page=$2&sort=$1
RewriteRule ^photo/trending/sort:([A-Za-z0-9]+)/page:([0-9]+)/$ photo.php?tab=trending&page=$2&sort=$1

And so on

我想知道有一种可能性让.htaccess文件检测到任何page:([0-9]+)并自动将带有页码的变量发送到php文件。这将非常有用,因为我还有一篇文章,视频和论坛部分,它们具有相同的功能。

1 个答案:

答案 0 :(得分:1)

尝试替换为:

# Extract out the "page" and "sort" parts of the URI, and append them to the query string
RewriteRule (.*)/page:([0-9]+)/(.*) /$1/$3?page=$2 [L,QSA]
RewriteRule (.*)/sort:([A-Za-z0-9]+)/(.*) /$1/$3?sort=$2 [L,QSA]

# Proceed with the regular routing
RewriteRule ^photo/?$ photo.php?tab=latest  [L,QSA]
RewriteRule ^photo/trending/?$ photo.php?tab=trending [L,QSA]
RewriteRule ^photo/friends/?$ photo.php?tab=friends [L,QSA]
RewriteRule ^photo/favorite/?$ photo.php?tab=favorite [L,QSA]

这里的关键是在任何地方都使用QSA标志,因此当查询字符串放在一起时,可以根据需要附加新位。另一件事是常规路由部分,我将/?添加到正则表达式匹配的末尾,因为猜到页面/排序处理,你最终可能会得到尾部斜杠。