0

考虑这个工作流程:

用户请求website.com/lolmyblogpost

我的 .htacces 就像...

RewriteCond %{REQUEST_URI} !=/index.php
RewriteRule .* /index.php

在 index.php 中,我将搜索模板文件树以lolmyblogpost.html返回:

/path/to/lolmyblogpost.html

所以在我的主模板中,我可以:

{include file="{$pathToTemplate}"}

如何在目录树中搜索文件并返回文件路径?

4

1 回答 1

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文件扩展名。

您现在可以使用类似的 URL 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 中传递的变量和变量。

编辑: 添加了RewriteEngineand 规则以将所有内容推送到index.php. 这意味着您现在在服务器上有一个(真实的)单页,index.php它需要检查$_SERVER['REDIRECT_URL']var 以了解真正请求的内容。

例如,http://example.com/a_page现在将加载一个请求index.phpa_page传递给$_SERVER['REDIRECT_URL']. 注意:此解决方案会将所有内容推送到 index.php。您将需要包括一个例外,如:

 RewriteCond %{REQUEST_FILENAME} !.not_me_plz.*

not_me_plz允许“按预期”提供以文件开头的所有文件。

于 2013-01-06T05:14:09.557 回答