本文介绍了mod_rewrite的:用正则表达式相同的两个规则,服务第一或第二,如果加薪404(又名不得已规则)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有简单的.htaccess,它实现了前端控制器模式(即重定向到index.php的非静态请求)

I have simple .htaccess, which implements front controller pattern (i.e. redirects non static requests to index.php)

按网址服务于网页和新闻规则。

Rules for serve for page and news by url.

RewriteRule ^([a-z0-9_]+)/$ /index.php?action=page&url=$1
RewriteRule ^([a-z0-9_]+)/$ /index.php?action=news&url=$1

如果没有与通过URL没有网页(即404错误引起的),我需要服务的消息。

If there is no page with passed url (i.e. 404 error raises), I need serve news.

我要指派2规则1的正则表达式:如果第一条规则返回404,第二次尝试。我知道的替代方式:

I want assign 2 rules to 1 regexp: if first rule returns 404, try second. I know alternative ways:


  1. 使用不同的正则表达式两个规则,如@Starkeen说。

  2. Deligate登录到实际的处理器(在我的情况下,它是PHP)。

我可以实现与的.htaccess / mod_rewrite的

P.S。我决定不要过于复杂的事情,实现变型1。

P.S. I decided don't overcomplicate things and to implement variant 1.

推荐答案

您使用的是相同的模式这两个规则,这就是为什么第一个被处理,第二被忽略。

you are using same pattern for both rules, that is why the first is being processed and the second being ignored.

这两个规则的变化模式

RewriteRule ^page/([a-z0-9_]+)/?$ /index.php?action=page&url=$1 [NC,L]
RewriteRule ^news/([a-z0-9_]+)/?$ /index.php?action=news&url=$1 [NC,L]

现在,你可以使用网址为:

Now you can use your urls as :

example.com/page/foo
example.com/news/foo

这篇关于mod_rewrite的:用正则表达式相同的两个规则,服务第一或第二,如果加薪404(又名不得已规则)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-30 03:00