3

My .htaccess file contains the following directives

DirectoryIndex index.html index.php  
# redirect invalid requests and missing files to the home page  
RewriteCond %{REQUEST_FILENAME} !-f  
RewriteCond %{REQUEST_FILENAME} !-d  
RewriteRule ^(.*)$ http://www.mydomain.com/ [L]

The problem is that many programmers(loosely used term) worked on this site. Some directories use index.html and some use index.php.

If a directory uses index.php, the request to www.mydomain.com/directory looks for www.mydomain.com/directory/index.html and is redirected to www.mydomain.com before it can look for www.mydomain.com/directory/index.php

How can I both try all DirectoryIndex files AND redirect missing files to the home page?

4

1 回答 1

2

如何同时尝试所有 DirectoryIndex 文件并将丢失的文件重定向到主页?

我认为 mod_rewrite 或 mod_alias 模块不可能做到这一点。您必须寻找其他选项来解决问题。这是使用相同的 DirectoryIndex 指令强制在根目录加载文件作为最后一个选项的想法:

将此行放在根目录的一个 .htaccess 文件中:

DirectoryIndex  index.php  index.html  /missing.php

missing.php使用这些代码行在根目录中创建:

<?php
header("Location: http://www.example.com/"); // Redirect
?>

不需要额外的指令或规则。如果在目标目录中没有找到之前的文件(从左到右),则将加载根目录中的missing.php 。不过,所有请求都必须有一个尾部斜杠才能正常工作。

缺少,php只是一个例子。可以使用任何文件名。

更新了附加选项:

根据 OP 评论
“但是我如何处理丢失的文件,例如 example.com/file-not-on-server.php”

在这种情况下,mod_rewrite确实是一个解决方案。

您可以在根目录下的 .htaccess 文件中尝试此操作:

# Directive that solves the original question
DirectoryIndex  index.php  index.html  /missing.php

Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /
# Next condition is met when the requested file doesn't exist
RewriteCond %{REQUEST_FILENAME} !-f
# If previous condition was met, use the next rule
RewriteRule ^(.*)$         /index.php [L,NC]

注意事项:
1./index.php在规则中,只是一个例子。它可以是任何文件。
2. 对于永久重定向,将 [L,NC] 替换为 [R=301,L,NC]。

于 2013-03-30T04:53:34.417 回答