前几天有 Mirages 用户告诉我如果不开启伪静态的话,有两个链接会导致404,然后才想起来因为我一直开着伪静态,所以一直忽略了这方面的需求,今天中午刚好有点时间,就尝试解决一下这个问题。
伪静态设置在 Typecho 后台有,选项名称为「是否使用地址重写功能」,翻了翻数据库,发现字段名为rewrite
,然后就根据这个字段做了下判断,在没开启地址重写功能的时候自动在链接中补上index.php
就可以了。非常简单。
if ($options->rewrite == 0) {
}
顺便,想起了前两天看到 Jrotty 的一篇文章:如何为 typecho 站点设置多个域名,是关于带 www
和不带 www
的域名路径的一些问题,可能会导致一些静态文件跨域的问题(虽然我从来没遇到过。。。),但解决方案有好几种,但都会修改配置文件甚至 Typecho 源码。个人认为,这种事在主题层面解决会更好一些。
我个人的解决方案是不使用 $options->siteUrl
,而是使用 $options->rootUrl
,这样,Typecho 后台的「站点地址」选项的设置就影响不到我们链接的生成,而且,对于文章、分类、评论等 Typecho 自己生成的链接中( $item->permalink()
)都是使用的 $options->rootUrl
。
但是这里有一点问题,就是 $options->themeUrl
使用的是 $options->siteUrl
,很多人制作主题的时候会使用它引入静态文件:
<link rel="stylesheet" href="<?php $this->options->themeUrl('style.css'); ?>">
这也是官方主题的做法。除了调用函数,我们还可以直接使用 $options->themeUrl
获取其值,然后对其进行拼接:
<link rel="stylesheet" href="<?= $this->options->themeUrl.'/style.css'; ?>">
所以我们可以对其做一下替换:
define("THEME_URL", rtrim(preg_replace('/^'.preg_quote($options->siteUrl, '/').'/', $options->rootUrl.'/', $options->themeUrl, 1),'/'));
然后就可以使用了:
<link rel="stylesheet" href="<?= THEME_URL ?>/style.css">
目前测试下来一切正常。
以上。
感觉开伪静态好看而且只要搞♂ 一下.htaccess就行了
是的,所以一直以来都把这个东西给忽略了
哇,学习了,我的模板未来1.7版将抄用\#(赞一个),还有就是文章已转载\#(欢呼)
伪静态!\#(小眼睛)
怎么了?\#(喷水)
路径全是#!xxx的一脸懵逼\#(小眼睛)
你那个更厉害了@(你懂的)
收录就丢一边吧qwq
你这开开关关的要收录干嘛\#(小怒)
我咋说不出话来了\#(小眼睛)
@(疑问)这个是可以把www重定向到不带www的域名的方法吗\#(期待)
看得有点迷糊\#(皱眉)
不是的,重定向可以用服务器搞定,不用这么麻烦
\#(惊喜)秒回呀。。就是服务器弄那啥301定向那个吗?
对
https://liyuans.com/archives/htaccess-to-achieve-pseudo-static-301-redirect-antitheft-chain.html
于是我来留个广告,关于怎么301重定向的:\#(惊喜)
\#(高兴)
还是开启伪静态功能比较好!
是啊,但是就算不开启也要兼容嘛\#(肿包)