找不到匹配项时的404页面

时间:2012-08-08 04:59:17

标签: php mod-rewrite

我有这个重写规则:

RewriteEngine on
RewriteBase /

RewriteCond %{THE_REQUEST} \.php[\ /?].*HTTP/ [NC]
RewriteRule ^.*$ - [R=404,L]

RewriteRule ^(home|contact|about|submit|search)/?$ /index.php?page=$1 [L]
RewriteRule ^([a-z]+)/([a-z0-9-]+)/?$ /index.php?page=home&cat=$1&slug=$2 [L]
RewriteRule ^([a-z]+)/?$ /index.php?page=home&cat=$1 [L]

我想要的是:

  • 如果用户输入的内容与最后三个条件不匹配,我想显示404错误。目前它加载主页。所以我在那里检查$_GET['page']。我不想检查php。
  • 你有什么需要改进我的重写规则或任何补充吗?

请帮助

3 个答案:

答案 0 :(得分:0)

由于所有内容最终都路由到 index.php (前端控制器模式),我建议删除mod_rewrite并使用:

FallbackResource /index.php

然后解析 index.php 中的网址并相应地处理路由。

这需要一些改写,但从长远来看会更灵活。

详细了解FallbackResourceFront-Controllers in PHP

答案 1 :(得分:0)

您可以使用mod rewrite为您的网页index.php添加参数,然后在php页面中处理它们,可能会发回错误页面(如cakePHP中)。只保留一条规则。

 RewriteRule ^([0-9A-Za-z]+)/?$ /index.php?argument=$1 [L]

答案 2 :(得分:0)

尝试使用ErrorDocument白名单位页

ErrorDocument 404 /erreur_404.html