我有简单的.htaccess,它实现了前端控制器模式(即将非静态请求重定向到index.php)
按网址投放网页和新闻的规则。
RewriteRule ^([a-z0-9_]+)/$ /index.php?action=page&url=$1
RewriteRule ^([a-z0-9_]+)/$ /index.php?action=news&url=$1
如果没有传递网址的网页(即404错误加注),我需要发布新闻。
我想为1个正则表达式分配2个规则:如果第一个规则返回404,请尝试第二个。我知道其他方法:
我可以使用.htaccess/mod_rewrite
实现此行为吗?
P.S。我决定不要过度复杂化并实施变体1。
答案 0 :(得分:1)
您对两个规则使用相同的模式,这就是为什么第一个被处理而第二个被忽略的原因。
更改两个规则的模式
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]
现在您可以将您的网址用作:
example.com/page/foo
example.com/news/foo
答案 1 :(得分:0)
只有在该位置没有现有文件或目录时才会启动此重写。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php?action=news&url=$1 [L,QSA]
的
如果文件不存在,-f
标志将仅重写,-d
标志将确保重写不会在目录存在的情况下启动。< / p>