如果找不到文件,则mod_rewrite重定向

时间:2011-08-02 17:52:38

标签: php .htaccess mod-rewrite url-rewriting front-controller

我有一个网站使用前端控制器将流量重定向到某些文件,所以我可以使用SEO友好的URL,但网站上有一些静态页面,我不想让流量远离:

我目前有以下内容.htaccess:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.exmple.com/$1 [L,R=301]
ErrorDocument  404  /controller.php

似乎工作正常:

  • 所有流量都转移到www.example.com;
  • 任何未找到的网页都会定向到controller.php来处理;
  • 任何实际存在的内容,例如www.example.com/about_us.php仍有效;

问题在于它仍然报告404错误,即使页面仍然正确发送和显示 - 它与最终用户看起来没有任何不同,但是随着谷歌机器人看到404,它搞砸了我的搜索引擎优化并假设那里没有别的东西。

有什么方法可以简单地将所有流量重定向到某些页面列表之外,还是有更优雅的解决方案?

任何帮助,想法,评论等都会受到欢迎

1 个答案:

答案 0 :(得分:1)

RewriteEngine On
ErrorDocument  404  /controller.php

RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule .* index.php/$0 [PT]

你应该通过index.php路由...否则下面的行应该起作用而不是上面的行。

RewriteRule .* $0 [PT]