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



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

我知道下面使它如此测试.php显示为 domain.com/test/但要做到这一点,我需要为我希望显示为子目录的每个文件编辑 .htaccess。

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
RewriteRule ^test/?$ test.php [L,NC]

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

一些没有重写Cond的递归尝试:

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteRule (.*.php)$ $1 [L]
RewriteRule (.*) $1.php
您可以使用

此代码隐藏.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。你会有类似 http://domain.com/welcome/而不是 http://domain.com/welcome.php

最新更新