.htaccess 我如何使用htaccess运行一个类似模板的php脚本,它的url指向一个不存在的文件?

brccelvz  于 12个月前  发布在  PHP
关注(0)|答案(2)|浏览(94)

所以,我有一个PHP脚本,我们将调用template.php,它有我需要的所有智能。
今天,我在一个文件夹中有几个文件,它们的名称像name1.phpname2.php和其他文件。所有这些文件都有相同的内容:<?php include('template.php') ?>
template.php的智能使用URL的文件名来区分文件。
问题是我必须在文件夹中物理地创建这些文件。
我的问题是(我还没有找到任何东西):使用.htaccess,我可以让服务器运行基于模板URL的脚本吗?
范例:

  • 假设文件夹中存在template.php文件。
  • 文件夹中没有其他文件。
  • 客户访问www.example.com/name1.phpwww.example.com/name2.php
  • .htaccess标识文件,并根据template.php和文件名(如name1.phpname2.php)继续执行脚本。

你能给予我出个主意吗?或者指出我在哪里可以获得更多的这方面的知识?

hrirmatl

hrirmatl1#

我会将所有流量指向template.php。然后在template.php中执行,然后包含请求的文件(如果存在)。
您可以在执行template.php文件之前或之后进行错误处理,具体取决于您是否希望根据所请求的文件是否存在来执行该文件。
.htaccess看起来像这样:

<IfModule mod_rewrite.c>
    RewriteBase /
    RewriteRule ^template\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /template.php [L]
</IfModule>

然后你的template.php

<?php
#template.php execution code

$requested_uri = $_SERVER['REQUEST_URI'];

if( file_exists($requested_uri) ){
    include $requested_uri;
}else{
    #404 or other error handling
}
jgzswidk

jgzswidk2#

您可以添加一个条件来检查,使其不是template.php文件,并重写此文件,否则,例如:

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/templates/template\.php$ [NC]
RewriteRule ^templates/(.*)$ /templates/template.php?name=$1 [L]

在这里,我们将请求文件的名称作为查询字符串发送到template.php文件:

<?php
$requestedTemplateFileName = $_GET['name'] ?? 'default.php';

相关问题