htaccess 在获取没有索引 .php 的目录时不重写 URL

htaccess not rewriting URL when directory without index.php is fetched

提问人:Jodes 提问时间:10/26/2023 最后编辑:RavinderSingh13Jodes 更新时间:10/27/2023 访问量:26

问:

我写了一个htaccess文件来重写URL。它应该做什么:当用户访问没有相应PHP文件的URL时,它会重定向到route.php。

对于目录来说,它变得有点复杂;如果导航到的目录中没有索引 .php,它也应该重写为 Route.php。

代码如下:

RewriteEngine On

# Check if it's a directory without an index.php
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_FILENAME}/index.php !-f
RewriteRule . route.php [L]

# Check if it's not a file or directory
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . route.php [L]

问题是,当我在没有索引.php的地方唠叨到“/”时,它(不需要)显示一个目录列表(如果索引被禁用,则显示“禁止”)。

这是怎么回事?如何使它重写对没有索引.php的目录的请求?

apache .htaccess mod-rewrite url-重写

评论


答:

2赞 anubhava 10/26/2023 #1

这几乎是正确的,但首先有一个点,这意味着 URI 中必须至少存在一个字符。但是,对于登陆页面,相对 URI 将只是一个空字符串。RewriteRule

这应该适合您:

RewriteEngine On

# Check if it's a directory without an index.php
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_FILENAME}/index.php !-f
RewriteRule ^ route.php [L]

# Check if it's not a file or directory
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ route.php [L]
1赞 CBroe 10/27/2023 #2

这得到了一个应该已经起作用的答案,但为了完整起见,我想指出一个替代方案。

如果导航到的目录中没有索引.php,它也应该重写为路由.php

您不一定需要为此使用重写,您可以在 DirectoryIndex 指令中将其指定为替代方法:

DirectoryIndex index.php /route.php

引用文档,

可以给出几个 URL,在这种情况下,服务器将返回它找到的第一个 URL。

因此,它将首先在当前目录中查找 an,如果不存在,则在根级别查找 。index.php/route.php