- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我的.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/
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
来自documentation我有这个: AliasMatch "^/projects/(.+)" "/var/www/domain.name/$1/public" 它应该只匹配像 ../projec
我有两个索引文件,我希望它们都在那里。我写了 DirectoryIndex index.php index.html在我的 .htaccess文件。这是我的 .htaccess 文件中唯一的一行,当我
我有一个 DirectoryIndex 页面,我想用 CSS 设计它的样式。而不是它看起来像这样: 有没有可能让它看起来不一样? 最佳答案 在 .he 访问文件中设置 header 模板,然后在其中包
我的.htaccess 文件包含以下指令 DirectoryIndex index.html index.php # redirect invalid requests and missing fi
我有一个包含一个域和一个子域的共享主机(用于移动和客户端)。每个域和子域都有不同的默认索引页面。托管公司告诉我将所有内容都放在我的 .htaccess 文件中,因为我无权访问 httpd.conf。
我的托管公司最近将我从 Apache 1 升级到 Apache 2,并且我已经开始看到我的 mod_rewrite 内容出现了一些完全不同的行为。 这是我的 .htaccess 文件: Directo
我在/geo 上安装了一个 Tomcat 应用程序,该应用程序有一个“index.jsp”,可以直接访问并且可以正常工作,但是当我尝试让 apache 将它用作目录索引条目时,它永远不会出现.比这更奇
如何同时使用 ProxyPass 和 DirectoryIndex? 我有以下规则: # Index DirectoryIndex index.html # Service Endpoint Prox
我在我的 .htaccess 文件中有以下重写,它从文件中删除了 .php 扩展名,例如将 so.com/question.php 转换为 so.com/question。 RewriteEngine
我确信这个问题已经被提出并得到了回答,但我没有找到解决方案。我有一个刚刚添加了 SSL 的虚拟主机,但它没有按预期工作。非 SSL 版本工作正常。以下是我在 httpd.conf 中得到的内容:
有没有办法在 Apache 下运行的 PHP 中获取 DirectoryIndex 的数组(或类似的东西)?例如,我希望能够检查特定目录中是否存在 DirectoryIndex 文件之一。这与 How
我们正在尝试设置本地开发 XAMPP 计算机(Apache2,在 Windows 8 上)。 除了一种特定类型的指令外,所有 mod_rewrite 指令都可以正常工作:我们尝试将对某些目录的请求重定
在我的 apache 配置中,我有一个虚拟主机配置如下: Alias /mediamanager /storage/files/mediamanager DirectoryIndex /medi
是否可以配置Resin提供静态文件,以便导航到例如http://localhost:8888/foo/bar/将提供文件 foo/bar/index.html (不执行重定向)?我在 Resin 文档
我试图在 docker 容器中使用 docker-compose 获取 php:apache 服务器以工作。但是在组合之后,我收到以下错误消息: [client 172.21.0.1:49230] A
我是一名优秀的程序员,十分优秀!