【发布时间】:2021-01-20 22:46:56
【问题描述】:
我正在尝试通过 .htaccess 实现一些目标,但一直遇到问题。在您告诉我我需要进行更好的研究并且在此或其他论坛上已经有解决方案之前,请知道我已经这样做了。在来这里之前,我总是尝试自己解决问题,但这确实让我感到难过。我尝试过的一切都只是部分奏效。在这里的任何帮助或教育将不胜感激。
我的网站结构简单:
(root)
| index.html
| .htaccess
|
|___portal-folder
| index.php
| home.php
|
|_____admin-folder
| index.php
我希望实现以下目标:
-
当用户导航到任何基本目录时,例如
site.com或site.com/portal-folder/,他们在浏览器中看不到索引文件名index.html或index.php。 -
如果用户导航到完整的 URL
site.com/index.html或site.com/portal-folder/index.php我希望用户在浏览器中分别看到site.com或site.com/portal-folder/。 -
去除浏览器中所有文件的文件扩展名。因此,例如导航到
site.com/portal-folder/home.php将在浏览器中显示为site.com/portal-folder/home
以下代码我正在使用某种作品,但我得到了奇怪的行为。例如:
-
导航到
site.com/portal-folder/index不会删除索引文件名并在浏览器中显示为site.com/portal-folder/index而不是site.com/portal-folder/ -
导航到
site.com/portal-folder/不会删除索引文件名并在浏览器中显示为site.com/portal-folder/index.php。 -
导航到
site.com/portal-folder/index.php将用户带回根site.com -
导航到
site.com/portal-folder/home可以正常工作,但导航到site.com/portal-folder/home.php不会去掉 .php 扩展名。 -
导航到
site.com可以正常工作,但导航到site.com/index.html不会删除索引文件名。RewriteEngine On DirectoryIndex index.html index.php # remove trailing slash RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{THE_REQUEST} \s(.+?)/+[?\s] RewriteRule ^(.+?)/$ /$1 [R=301,L] # To internally forward /dir/file to /dir/file.php RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{DOCUMENT_ROOT}/$1.php -f RewriteRule ^(.+?)/?$ /$1.php [L]
服务器信息:Apache 版本 2.4.46
【问题讨论】:
标签: regex apache .htaccess mod-rewrite url-rewriting