如果文件夹不包含 index.php/.html 使用 .htaccess 如何显示内容?

How show contents if the folder does not contain index.php/.html using .htaccess?

我的文件夹集如下所示:

server
--public
----index.php
----/items/
------index.php
------template.php
------/folder1/
------/folder2/
------/folder3/
--------index.php
------/folder4/

发生这种情况时,浏览器中的 folder3 会显示站点中的内容。com/items/folder3/.

我的任务是在/folder1/、/folder2/、/folder4/中显示文件站点的内容。com/items/template。php(因为这些文件夹不包含index.php 或 index.html)。我该怎么做?

=============================

我试过这种方法,但它有缺点 - 这些规则也适用于不存在的目录(如 /items/aaa/bbb/zzz/),这对我来说不合适。

DirectoryIndex index.html index.htm index.php
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}//index\.html !-f
RewriteCond %{DOCUMENT_ROOT}//index\.htm !-f
RewriteCond %{DOCUMENT_ROOT}//index\.php !-f
RewriteRule ^(.+?)(?:/[^/]+)?/?$ template.php [L]

你可以在这里找到你的答案

您应该将空文件夹重写为 template.php

尝试这样的事情:

# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Rewrite all other URLs to template.php
RewriteRule .* /items/template.php [L]

编辑:

要检查索引文件是否存在,您可以尝试这样的操作:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_FILENAME}/index\.php !-f
RewriteRule . /template.php [L]

以上代码 RewriteCond %{REQUEST_FILENAME} !-f 检查请求的 uri 是否不是文件。

RewriteCond %{REQUEST_FILENAME} -d 检查请求的 uri 是否为目录。

RewriteCond %{REQUEST_FILENAME}/index\.php !-f 检查是否找不到 index.php。

然后重定向到/template.php