考虑这个工作流程:
用户向website.com/lolmyblogpost
我的.htacces就像......
RewriteCond %{REQUEST_URI} !=/index.php
RewriteRule .* /index.php
在index.php中我将在lolmyblogpost.html
返回的模板文件树中搜索:
/path/to/lolmyblogpost.html
所以在我的主模板中我可以:
{include file="{$pathToTemplate}"}
如何在目录树中搜索文件并返回文件路径?
答案 0 :(得分:1)
您真正想要的是使用默认类型“回顾”支持。像这样设置你的Apache虚拟主机(
)<VirtualHost *:80>
ServerName example.com:80
ServerAlias www.example.com
DocumentRoot "/path/to/root/dir"
AddDefaultCharset UTF-8
ErrorDocument 403 "/403.php"
ErrorDocument 404 "/404.php"
<Directory /path/to/root/dir>
Options Indexes FollowSymLinks
DefaultType application/x-httpd-php
AllowOverride All
Order deny,allow
Allow from all
AddOutputFilterByType DEFLATE application/javascript text/css text/html text/plain text/xml
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !.index.ph.*
RewriteRule ^(.*)$ /index.php
</Directory>
</VirtualHost>
重要的一行是DefaultType application/x-httpd-php
,这意味着您现在可以摆脱.php
文件扩展名。
您现在可以使用http://example.com/this_is_a_php_page
之类的网址,也可以使用http://example.com/this_is_a_php_page/with_a_path_info_var
。
因此,在this_is_a_php_page
(实际上是没有扩展名的.php文件)上,您可以使用$_SERVER['PATH_INFO']
来检查URI中传递的内容。
修改强>
添加了RewriteEngine
和规则,将所有内容推送到index.php
。这意味着您现在在服务器上有一个名为index.php
的(真实)单页,需要检查$_SERVER['REDIRECT_URL']
var以了解真正的请求。
例如,http://example.com/a_page
的请求现在会加载index.php
并将a_page
传递给$_SERVER['REDIRECT_URL']
。注意:此解决方案将所有内容推送到index.php。您需要包含一个例外:
RewriteCond %{REQUEST_FILENAME} !.not_me_plz.*
允许所有以not_me_plz
文件开头的文件“按预期”投放。