如果文件夹不包含 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
我的文件夹集如下所示:
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