Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache Mod_rewrite:两条规则具有相同的regexp,如果404引发,则第一条或第二条规则(又称最后一条规则)_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

Apache Mod_rewrite:两条规则具有相同的regexp,如果404引发,则第一条或第二条规则(又称最后一条规则)

Apache Mod_rewrite:两条规则具有相同的regexp,如果404引发,则第一条或第二条规则(又称最后一条规则),apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,我有simple.htaccess,它实现了前端控制器模式(即将非静态请求重定向到index.php) 按url为页面和新闻提供服务的规则 RewriteRule ^([a-z0-9_]+)/$ /index.php?action=page&url=$1 RewriteRule ^([a-z0-9_]+)/$ /index.php?action=news&url=$1 如果没有传递url的页面(即404错误引发),我需要提供新闻 我想将2个规则分配给1个regexp:如果第一个

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

按url为页面和新闻提供服务的规则

RewriteRule ^([a-z0-9_]+)/$ /index.php?action=page&url=$1
RewriteRule ^([a-z0-9_]+)/$ /index.php?action=news&url=$1
如果没有传递url的页面(即404错误引发),我需要提供新闻

我想将2个规则分配给1个regexp:如果第一个规则返回404,请尝试第二个。我知道其他方法:

  • 如@Starkeen所述,对不同的regexp使用两个规则
  • Deligate登录到实际的处理程序(在我的例子中是php)
  • 我可以用
    .htaccess/mod_rewrite
    实现这种行为吗


    p.S.我决定不让事情过于复杂,而是实施变体1。

    只有在该位置没有现有文件或目录时,此重写才会生效


    -f
    标志将使重写仅在文件不存在时生效,而
    -d
    标志将确保重写不会在目录存在时生效。

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

    更改这两个规则的模式

    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]
    
    现在,您可以将URL用作:

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

    您想将所有404重定向到新闻页面吗?谢谢您的评论。不,这是一个非常简单的例子。我想为1个regexp分配2个规则:如果第一个规则返回404,请尝试第二个。谢谢您的回答。在问之前,我想把我的规则分成两部分。我还考虑将上述逻辑委托给实际的处理程序(在我的例子中是php)。但理想的行为是新闻和页面处于同一级别,即example.com/page-or-news-urlI决定不要使事情过于复杂,并实现您的变体。
    example.com/page/foo
    example.com/news/foo