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

时间:2012-05-09 08:25:15

标签: .htaccess mod-rewrite

好的,我能够解决上一个问题,但现在我遇到了各种障碍。我的网站计划在许多不同的页面上提供内容,我想知道是否有办法让每个.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]

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

3 个答案:

答案 0 :(得分:1)

没有RewriteCond的一些递归尝试:

Options +FollowSymLinks -MultiViews
RewriteEngine On

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

答案 1 :(得分:0)

您可以使用此代码隐藏.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]

答案 2 :(得分:0)

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

以下是类控制器的示例:

class ControllerIndex {
    public $urlmap = array(
        'welcome' => 'WelcomePage'
        );
}

使用前端控制器,所有请求都通过全局映射机制,然后委派给处理程序。然后,处理程序将具有类的形式,而不是文件。

前端控制器提供更有意义/漂亮的URL。你会有http://domain.com/welcome/而不是http://domain.com/welcome.php