如何在不发送404标头的情况下重定向未找到的URL?

时间:2011-03-04 05:53:47

标签: apache .htaccess

我的网站需要一个.htaccess文件,当找不到网页时,该文件会将用户重定向到index.php。但是,我不希望Apache在文档中发送404标头。

我之前问了这个问题: Apache .htaccess 404 error redirect

命令"ErrorDocument /index.php"产生我想要的确切效果,除了它向页面发送404标题。我能做什么?我应该用PHP覆盖404标题吗?

1 个答案:

答案 0 :(得分:8)

将其添加到您的.htaccess文件中:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
  1. 启用重写
  2. 检查请求的文件是否存在为大小(非空)的regualar文件
  3. 检查请求的文件是否为链接
  4. 检查请求的文件是否是目录
  5. 如果前3个陈述之一为真,则显示该文件
  6. 否则转到index.php
  7. 如果重定向到index.php,您可以使用$_SERVER["REQUEST_URI"]内的index.php

    获取请求的uri
      
        
    • ' - d'(是目录)将TestString视为路径名并测试是否   它存在并且是一个目录。
    •   
    • ' - f'(是常规文件)将TestString视为路径名并测试是否   它存在并且是常规文件。
    •   
    • ' - s'(是带有大小的常规文件)将TestString视为路径名   并测试它是否存在并且是一个   大小超过的常规文件   零。
    •   
    • ' - l'(是符号链接)将TestString视为路径名并测试是否   它存在并且是一种象征性的联系。
    •   
    • ' - F'(通过子请求是现有文件)检查TestString是否为a   有效的文件,可通过所有   服务器当前配置的访问权限   控制该路径。这用了   内部子请求确定   检查,因此请小心使用它   降低服务器性能!
    •   
    • ' - U'(通过子请求是现有的URL)检查TestString是否为   有效的URL,可通过所有访问   服务器当前配置的访问权限   控制该路径。这用了   内部子请求确定   检查,因此请小心使用它   降低服务器的性能!
    •   

    更多信息:http://httpd.apache.org/docs/current/mod/mod_rewrite.html