.htaccess可根据请求的URL打开php模板文件

.htaccess可根据请求的URL打开php模板文件,php,.htaccess,mod-rewrite,Php,.htaccess,Mod Rewrite,我正试图找到一种方法,将模板php文件作为请求的url/文件名加载: 我有一个包含数百页的目录,希望能够从模板文件动态生成它们,而不是有数百个包含相同代码的文件。理想情况下,将有一个php文件使用basename()从MySQL加载内容,其中从特定目录请求的每个url都将打开/gallery/template.php作为请求的url,例如/gallery/example.html 我觉得这可能可以使用.htaccess和mod rewrite来完成,但我还没有找到一个实际的例子。我试图避免使用G

我正试图找到一种方法,将模板php文件作为请求的url/文件名加载:

我有一个包含数百页的目录,希望能够从模板文件动态生成它们,而不是有数百个包含相同代码的文件。理想情况下,将有一个php文件使用
basename()
从MySQL加载内容,其中从特定目录请求的每个url都将打开
/gallery/template.php
作为请求的url,例如
/gallery/example.html


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

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

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

我没有测试它,但下面是一个示例:

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

字符串“gallery”必须位于请求的URL中。

您可能希望使用AJAX作为实现所需内容的方法。你熟悉AJAX吗?如果您发布更多关于您的细节和期望结果的详细信息,也许我们可以进一步帮助您


查看,然后查看。

查看上的
$\u服务器['PATH\u INFO']
。使用它,你可以得到

http://example.com/index.php/path/to/your/template
调用
index.php
$\u请求['path\u INFO']
中将整个
/path/作为字符串传递给/your/template

.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>

重新启动发动机
重写基/
#检查用户是否试图访问有效文件,
#例如图像或css文档,如果这不是真的,它会发送
#请求index.php
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则^(.*)$index.php/$1[L]
(重写规则取自。我自己还没有完成修改重写部分,所以我不能保证这会起作用)

这将需要
http://example.com/path/to/your/template
并让服务器将其视为
http://example.com/index.php/path/to/your/template
,使其将所有内容传递到您的
index.php
文件


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

感谢您的回复。我试过你的代码,但似乎没有任何效果。我将尝试澄清一下我的情况:.htaccess文件将放在/gallery/目录中,并且有一个子目录包含图像,因此目录中只有“假设”的html文件需要作为template.php打开。我已更改了答案,以仅反映重定向/gallery/*.html文件。您是否检查了Apach.conf文件以确保此目录的AllowOverride处于启用状态?我尝试了此操作,现在收到一个“未指定输入文件”错误。@user1854528是否正确?这是PHP脚本中的一个错误吗?我认为它不能正常工作,因为直接打开模板文件时PHP脚本就可以工作。谢谢你的帮助,我相信我会放弃这种方法,因为我知道这种方法是可行的,也就是说,用相同的include文件分别创建所有页面。谢谢你的回复。当我将.htaccess放在/gallery/目录中时,此代码给了我一个内部服务器错误。您必须将.htaccess放在“gallery”上方的目录中,并删除路径中的任何其他.htaccess文件。我根据您的建议再次测试了它,但它似乎什么也没做,理论上这意味着它正在工作,否则它会抛出一个错误。?template.php是否位于gallery/director?是的,template.php位于gallery/directory中。然而,现在当我试图在gallery/目录中请求html页面时,我收到了一个404错误。我将对此进行研究,我不确定它是否正是我所要寻找的,但它似乎是朝着正确的方向。不过,Ajax最终可能会实现我的目标,我正试图想出一个不依赖Javascript的解决方案。也许mod rewrite不是实现我目标的正确策略?我基本上是尝试使用一个php文件作为模板来动态生成其他URL,类似于wordpress可能做的事情:我不希望“example.html”实际存在于服务器上,而是当有人请求“example.html”时,它将从“template.php”生成。