好的,我能够解决上一个问题,但现在我遇到了各种障碍。我的网站计划在许多不同的页面上提供内容,我想知道是否有办法让每个.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]
哦,子目录中没有内容(如果它们甚至作为服务器上的文件夹存在。
答案 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