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

brccelvz  于 2023-10-23  发布在  PHP
关注(0)|答案(2)|浏览(154)

所以,我有一个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看起来像这样:

  1. <IfModule mod_rewrite.c>
  2. RewriteBase /
  3. RewriteRule ^template\.php$ - [L]
  4. RewriteCond %{REQUEST_FILENAME} !-f
  5. RewriteCond %{REQUEST_FILENAME} !-d
  6. RewriteRule . /template.php [L]
  7. </IfModule>

然后你的template.php

  1. <?php
  2. #template.php execution code
  3. $requested_uri = $_SERVER['REQUEST_URI'];
  4. if( file_exists($requested_uri) ){
  5. include $requested_uri;
  6. }else{
  7. #404 or other error handling
  8. }
展开查看全部
jgzswidk

jgzswidk2#

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

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

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

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

相关问题