我有两页:
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用于两个不同的页面? 提前致谢
答案 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-title1
和www.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-title
(以news-
开头的任何内容)
和www.site.com/some-category
类型的URI将转发到www.site.com/category.php?url=some-category