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

Nat*_*han 1 apache .htaccess

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

我之前问过这个问题: Apache .htaccess 404错误重定向

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

Dan*_*tik 9

将其添加到您的.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]
Run Code Online (Sandbox Code Playgroud)
  1. 启用重写
  2. 检查请求的文件是否作为具有大小(非空)的regualar文件存在
  3. 检查请求的文件是否是链接
  4. 检查请求的文件是否是目录
  5. 如果之前的3个陈述之一为真,则显示该文件
  6. 否则转到index.php

如果重定向到index.php,你可以通过$_SERVER["REQUEST_URI"]内部使用获得请求的uriindex.php

  • '-d'(is directory)将TestString视为路径名,并测试它是否存在并且是一个目录.
  • '-f'(是常规文件)将TestString视为路径名并测试它是否存在并且是常规文件.
  • '-s'(是带有大小的常规文件)将TestString视为路径名并测试它是否存在并且是一个大小大于零的常规文件.
  • '-l'(是符号链接)将TestString视为路径名并测试它是否存在并且是符号链接.
  • '-F'(通过子请求是现有文件)检查TestString是否是有效文件,并可通过该路径的所有服务器当前配置的访问控制进行访问.这使用内部子请求来确定检查,因此请小心使用它,因为它会降低服务器性能!
  • '-U'(通过子请求是现有URL)检查TestString是否是有效的URL,并且可以通过该路径的所有服务器当前配置的访问控制进行访问.这使用内部子请求来确定检查,因此请小心使用它,因为它会降低服务器的性能!

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

编辑:请注意这篇文章:https://stackoverflow.com/questions/486505/mod-rewrite-with-godaddy