.htaccess 使.php文件在地址栏中显示为子目录,隐藏实际的文件类型/名称?

.htaccess 使.php文件在地址栏中显示为子目录,隐藏实际的文件类型/名称?,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,好吧,我能解决我之前的问题,但现在我遇到了各种各样的障碍。我的网站计划在许多不同的页面上显示内容,我想知道是否有办法让每个.php文件显示domain.com/filename/而不是filename.php子目录 我知道下面是这样的,test.php显示为domain.com/test/,但要这样做,我需要为我希望显示为子目录的每个文件编辑.htaccess Options +FollowSymLinks -MultiViews # Turn mod_rewrite on RewriteEng

好吧,我能解决我之前的问题,但现在我遇到了各种各样的障碍。我的网站计划在许多不同的页面上显示内容,我想知道是否有办法让每个.php文件显示domain.com/filename/而不是filename.php子目录

我知道下面是这样的,test.php显示为domain.com/test/,但要这样做,我需要为我希望显示为子目录的每个文件编辑.htaccess

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteRule ^test/?$ test.php [L,NC]

哦,并且子目录中没有内容(如果它们甚至作为文件夹存在于服务器上)。

您可以使用此代码隐藏。php扩展名:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

# To externally redirect /dir/foo.php to /dir/foo/
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1/ [R,L]

# To internally redirect /dir/foo/ to /dir/foo.php
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.*?)/?$ $1.php [L]

我假设您对PHP中的面向对象编程有一定的了解。要实现这样的URL,您需要一个调度模式,最适合您的情况是前端控制器

下面是类控制器的示例:

class ControllerIndex {
    public $urlmap = array(
        'welcome' => 'WelcomePage'
        );
}
对于前端控制器,所有请求都通过一个全局映射机制,然后委托给一个处理程序。处理程序将采用类的形式,而不是文件的形式


前端控制器提供了更有意义的/漂亮的URL。您可以在不重写条件的情况下进行一些递归尝试,而不是进行类似的操作:

Options +FollowSymLinks -MultiViews
RewriteEngine On

RewriteRule (.*\.php)$ $1 [L]
RewriteRule (.*) $1.php