gpt4 book ai didi

php - .htaccess - 尝试所有 DirectoryIndex 并在文件不存在时重写

转载 作者:搜寻专家 更新时间:2023-10-31 21:12:43 24 4
gpt4 key购买 nike

我的.htaccess 文件包含以下指令

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]

问题是许多程序员(松散使用的术语)在此站点上工作。有些目录使用 index.html,有些目录使用 index.php

如果目录使用 index.php,则对 www.mydomain.com/directory 的请求会查找 www.mydomain.com/directory/index。 html 并在查找 www.mydomain.com/directory/index.php

之前被重定向到 www.mydomain.com

我怎样才能同时尝试所有 DirectoryIndex 文件并将丢失的文件重定向到主页?

最佳答案

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

我认为使用 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。不过,所有请求都必须有尾部斜杠才能正常工作。

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

更新了附加选项:

According to OP comment:
"But how do I handle missing files such as 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]。

关于php - .htaccess - 尝试所有 DirectoryIndex 并在文件不存在时重写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15710578/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com