默认情况下,我的主机提供商不使用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]
有人能帮我解决这个问题吗?
1条答案
按热度按时间a0x5cqrl1#
您需要设置
DirectoryIndex
(mod_dir的一部分)-这指示Apache在请求目录时服务哪个文件。(Apache默认值为index.html
,仅在请求的目录内。)例如:
参考文献:
这将无条件地将
.php
扩展名附加到任何未Map到文件的请求。这个“问题”是,如果你请求一个 directory(假设URL路径不包含点),那么它会将请求重写为/<directory>/.php
,这可能会导致404。如果您使用的是无扩展名的URL(并直接请求目录),那么在重写请求之前,您需要检查目标文件是否存在。例如:
在正则表达式字符类中不需要反斜杠转义文字点。
NC
标志在这里是多余的。您还应确保禁用了“多视图”,否则将绕过您的规则。例如: