mod_rewrite用于两个不同的页面

时间:2011-07-03 20:11:21

标签: mod-rewrite

我有两页:

categories.php 
在categories.php页面中的

我获取所有类别。

news.php

在新闻页面中我通过id获取新闻。

我已经将mod_rewrite用于类别:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9-/]+)$ categories.php?url=$1
RewriteRule ^([a-zA-Z0-9-/]+)/$ categories.php?url=$1

site/categori1 ----> this rule works for categorie page

是否可以打开mod_rewrite两个不同的页面?(categories.php和news.php)

RewriteRule ^([a-zA-Z0-9 - /] +)$ news.php?url = $ 2    RewriteRule ^([a-zA-Z0-9 - /] +)/ $ new.php?url = $ 2

上面的网站/ news-title1规则不适用于news.php页面。

如何将mod_rewrite用于两个不同的页面? 提前致谢

2 个答案:

答案 0 :(得分:2)

您必须更具体地说明您的正则表达式匹配:

'^([a-zA-Z0-9 - /] +)$'将匹配几乎所有内容。

您需要确定类别页面与新闻页面的区别并与之匹配,例如:

RewriteRule ^category/([a-zA-Z0-9-/]+)$ categories.php?url=$1
RewriteRule ^category/([a-zA-Z0-9-/]+)/$ categories.php?url=$1
RewriteRule ^news/([a-zA-Z0-9-/]+)$ news.php?url=$1
RewriteRule ^news/([a-zA-Z0-9-/]+)/$ news.php?url=$1

您可以通过其他方式区分规则,但您必须这样做。

例如,你可以在我上面的建议中重新排列规则,使类别规则捕获所有没有前缀的新闻:

RewriteRule ^news/([a-zA-Z0-9-/]+)$ news.php?url=$1
RewriteRule ^news/([a-zA-Z0-9-/]+)/$ news.php?url=$1
RewriteRule ^([a-zA-Z0-9-/]+)$ categories.php?url=$1
RewriteRule ^([a-zA-Z0-9-/]+)/$ categories.php?url=$1

答案 1 :(得分:2)

www.site.com/news-title1www.site.com/category1基本上匹配相同的网址,因此mod_rewrite无法最终确定重定向的位置。除了你已经拥有的东西之外,我会建议你跟进:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^news-([a-zA-Z0-9-/]+)/?$ news.php?url=$1 [L,NC,QSA]
RewriteRule ^([a-zA-Z0-9-/]+)/?$ categories.php?url=$1 [L,NC,QSA]

现在,www.site.com/news-some-title类型的URI会转发到www.site.com/news.php?url=some-titlenews- 开头的任何内容)

www.site.com/some-category类型的URI将转发到www.site.com/category.php?url=some-category