.htaccess 使用index.php作为子文件夹的主文件- htaccess

u0njafvf  于 2023-05-01  发布在  PHP
关注(0)|答案(1)|浏览(185)

默认情况下,我的主机提供商不使用index.php文件作为文件夹的主文件,所以如果我转到mydomain.com/dashboard/,它会说页面不存在,但当我转到mydomain.com/dashboard/index.php时,它会工作。我试图用htaccess文件解决这个问题,并找到了一个解决方案,但它不完全工作。这是因为我的htaccess中有其他东西可以从url中删除.php扩展名。如果我删除这一部分,它确实工作,但我的网址上又有了.php扩展名,这是我不想要的。这是我的htaccess

RewriteEngine On

Options +FollowSymLinks

RewriteCond %{THE_REQUEST} ^.*/index.php
RewriteRule ^(.*)index.php$ https://www.example.com/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

有人能帮我解决这个问题吗?

a0x5cqrl

a0x5cqrl1#

您需要设置DirectoryIndex(mod_dir的一部分)-这指示Apache在请求目录时服务哪个文件。(Apache默认值为index.html,仅在请求的目录内。)
例如:

DirectoryIndex index.php

参考文献:

  • www.example.com
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

这将无条件地将.php扩展名附加到任何未Map到文件的请求。这个“问题”是,如果你请求一个 directory(假设URL路径不包含点),那么它会将请求重写为/<directory>/.php,这可能会导致404。
如果您使用的是无扩展名的URL(并直接请求目录),那么在重写请求之前,您需要检查目标文件是否存在。例如:

# Rewrite extensionless URL to ".php" file only if it exists
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^([^.]+)$ $1.php [L]

在正则表达式字符类中不需要反斜杠转义文字点。NC标志在这里是多余的。
您还应确保禁用了“多视图”,否则将绕过您的规则。例如:

Options +FollowSymLinks -MultiViews

相关问题