2

我正在尝试找出一种将模板 php 文件加载为请求的 url/文件名的方法:

我有一个包含数百页的目录,并且希望能够从模板文件动态生成它们,而不是有数百个包含相同代码的文件。basename()理想情况下,将有一个 php 文件/gallery/template.php使用/gallery/example.html.

我觉得这可能可以使用 .htaccess 和 mod-rewrite 来完成,但我还没有找到它的实际示例。我试图避免使用 GET,但如果有更好的方法来实现这种效果,我愿意接受建议。谢谢你。

4

4 回答 4

0

基本上,您想要执行前端控制器模式。如果您的画廊子目录中的所有内容都需要重定向(即没有不需要路由到 template.php 的图像文件或子目录),您可以做一个简单RewriteRule的实现。只需将其放在 .htaccess 或您的 apache .conf 文件中

RewriteEngine On
RewriteRule ^/?gallery/.*\.html$ /gallery/template.php [QSA,L]
于 2012-11-26T20:40:09.357 回答
0

我没有测试它,但这里有一个例子:

RewriteEngine On
RewriteRule ^gallery/.*/?$ gallery/template.php [NC,L]

字符串 'gallery' 必须在请求的 URL 中。

于 2012-11-26T20:40:25.817 回答
0

查看$_REQUEST 手册$_SERVER['PATH_INFO']页。使用它,你可以得到类似的东西

http://example.com/index.php/path/to/your/template

调用index.php将整个/path/to/your/template作为字符串传递给$_REQUEST['PATH_INFO'].

在您的.htaccess文件中,您可以执行以下操作:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    #Checks to see if the user is attempting to access a valid file,
    #such as an image or css document, if this isn't true it sends the
    #request to index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

(从这里获取的重写规则。我自己还没有完成 mod-rewrite 部分,所以我不能保证这会起作用)。

这将采取类似的方式http://example.com/path/to/your/template并让服务器将其视为http://example.com/index.php/path/to/your/template,使其将所有内容传递给您的index.php文件。

之后,如何加载模板取决于您。

于 2012-11-26T20:45:19.917 回答
0

您可能希望使用 AJAX 作为完成您想要的方法的方法。你熟悉 AJAX 吗?如果您发布有关您的具体情况和期望结果的更多详细信息,也许我们可以为您提供进一步的帮助。

查看这些简单的 AJAX 示例,并查看此视频资源

于 2012-11-26T20:43:21.140 回答