Smarty PHP模板,mod重写更改URL但不是页面

时间:2013-12-16 01:39:58

标签: php caching mod-rewrite apache2 smarty

我现在已经重写了这个问题,因为我认为这个问题与URL重写没有关系。

我正在使用PHP和Smarty构建一个站点,并使用apache的mod重写使用相当常见的url重写。

在本地,如果我访问: example.com/search/?q=test ,我会收到“test”的搜索结果。 / search 不是真正的目录,它转发到 search.php?q =

当我上传时,它无法正常工作。我已启用sudo a2enmod rewrite重写并且网址正在更新,浏览器在地址栏中显示 example.com/search/?q=test ,不会抛出404,但是只是提供我的index.php页面。

我意识到问题可能与我的Smarty缓存有关。我有一个URL变量触发要重建的缓存,?rebuildCacheNow

如果我转到 / account ,我会获得索引页面,但如果我转到 / account?rebuildCacheNow ,则会显示帐户页面。

如果我返回索引 / ,它仍会显示帐户页面。转到 /?rebuildCacheNow 会显示主页。

这是我的主要Smarty模板:

{* Smarty *}

<!DOCTYPE html>
<!--[if lt IE 7 ]><html class="ie ie6" lang="en"><![endif]-->
<!--[if IE 7 ]><html class="ie ie7" lang="en"><![endif]-->
<!--[if IE 8 ]><html class="ie ie8" lang="en"><![endif]-->
<!--[if gt IE 8]><!--><html lang="en"><!--<![endif]-->

{include 'head.tpl'}

<body id="top">

{include 'header.tpl'}

<div class="content-container">
    <div class="container content">
      {include $page.content}
    </div>
</div>

{include 'footer.tpl'}

<script src="{$JQUERY_CDN}"></script>
<script src="{$BOOTSTRAP_JS_CDN}"></script>
<script src="/js/main.js"></script>
{$page.scripts}

</body>
</html>

每个页面都提供此模板,但我使用PHP来分配$page.content。因此, / buy 页面设置$page.content = 'buy.tpl' / search 设置$page.content = 'search.tpl'

但看起来main.tpl正在被缓存 - 是否有更好的方法可以使用1个主要大纲模板并在其中嵌入内容模板?

1 个答案:

答案 0 :(得分:0)

好的我已经解决了。所以我在本地设置rebuildCacheNow设置在每个页面上都有,以确保每次都能看到更改 - 这就是我没注意到的原因。

当我解决问题时,它与main.tpl的缓存有关,检查Smarty文档显示我可以将cache_id分配给渲染模板:

http://www.smarty.net/docsv2/en/caching.multiple.caches.tpl

所以当我渲染Smarty模板时,我会根据$page.content变量的哈希值给它提供缓存ID:

// make cache id, based on template path
$cache_id = sha1( $page[ 'content' ] );

$smarty->display( 'main.tpl', $cache_id );