PHP:在文件结构中提供没有.php文件的页面

时间:2010-01-01 02:38:20

标签: php url path

我正在为客户构建内部CMS。我不知道是否为每个页面创建一个新的php文件,我想知道是否有一种方法可以根据URL加载页面而不是该位置的物理php文件。

所以,如果我访问www.mysite.com/new-page,我希望这只是对我的模板,内容等的引用,而不是实际的.php文件。

很抱歉,如果我没有正确解释,但我很难解释它。

感谢。

3 个答案:

答案 0 :(得分:4)

听起来你需要Front Controller pattern

基本上每个URL都会被重定向到一个PHP页面,该页面决定了如何处理它。您可以使用Apache。mod_rewrite来实现此目的.htaccess:

RewriteEngine on
RewriteBase /
RewriteRule !\.(js|ico|txt|gif|jpg|png|css)$ index.php

将静态内容文件以外的所有内容重定向到index.php。根据需要进行调整。

如果您只想影响网址/新页面,请尝试以下内容:

RewriteEngine on
RewriteBase /
RewriteRule ^new-page/ myhandler.php

任何以“new-page”开头的网址都会发送到myhandler.php。

答案 1 :(得分:4)

通常是Web服务器与您的PHP代码一起处理此问题。因此,例如,如果您使用的是Apache,则可以使用mod_rewrite执行以下操作:

RewriteEngine on
RewriteRule ^page/([^/\.]+)/?$ index.php?page=$1 [L]

然后在您的PHP代码中,您可以检查$_GET['page']以查看正在调用的页面。

因此,访问mysite.com/page/blah将真正访问index.php?page=blah

答案 2 :(得分:1)

使用mod_rewrite重写PHP页面中的URL是解决方案。 我宁愿使用更通用的重写规则来重写任何未访问服务器上现有目录文件的URL。

# Rewrite URLs of the form 'x' to the form 'index.php?q=x'.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]