typecho修改成相对路径(官方版本1.2.1)

技术教程 · 04-29
typecho修改成相对路径(官方版本1.2.1)

typechp.jpg

typecho默认使用的是绝对路径,如果博客进行迁移,域名发生改变的话,原来的图片等附件链接如果不是使用图床,会报404错误,原因是作者在这方面使用了绝对路径,网上搜索了很久,都没有找到解决办法,最后还是靠自己搞掂了,下面方法是把绝对路径修改成相对路径的步骤。

1.先把 站点地址 修改成空白

打开 /var/Widget/Options/General.php 文件,在约164行代码处,原代码:

/** 站点地址 */
        if (!defined('__TYPECHO_SITE_URL__')) {
            $siteUrl = new Form\Element\Text(
                'siteUrl',
                null,
                $this->options->originalSiteUrl,
                _t('站点地址'),
                _t('站点地址主要用于生成内容的永久链接.') . ($this->options->originalSiteUrl == $this->options->rootUrl ?
                    '' : '</p><p class="message notice mono">'
                    . _t('当前地址 <strong>%s</strong> 与上述设定值不一致', $this->options->rootUrl))
            );
            $form->addInput($siteUrl->addRule('required', _t('请填写站点地址'))
                ->addRule('url', _t('请填写一个合法的URL地址')));
        }

修改成:

/** 站点地址 */
        /** 
        if (!defined('__TYPECHO_SITE_URL__')) {
            $siteUrl = new Form\Element\Text(
                'siteUrl',
                null,
                $this->options->originalSiteUrl,
                _t('站点地址'),
                _t('站点地址主要用于生成内容的永久链接.') . ($this->options->originalSiteUrl == $this->options->rootUrl ?
                    '' : '</p><p class="message notice mono">'
                    . _t('当前地址 <strong>%s</strong> 与上述设定值不一致', $this->options->rootUrl))
            );
            $form->addInput($siteUrl);
        }
        */

即把 $siteUrl 后面的删除

这一步是在站点链接选项处允许填入空置,然后到管理后台,设置---》基本---》站点地址,把网站地址删除(留白)并保存

(可选)然后,可以把源代码修改回来,且把整个代码注释掉:

/** 站点地址 */
        /** 
        if (!defined('__TYPECHO_SITE_URL__')) {
            $siteUrl = new Form\Element\Text(
                'siteUrl',
                null,
                $this->options->originalSiteUrl,
                _t('站点地址'),
                _t('站点地址主要用于生成内容的永久链接.') . ($this->options->originalSiteUrl == $this->options->rootUrl ?
                    '' : '</p><p class="message notice mono">'
                    . _t('当前地址 <strong>%s</strong> 与上述设定值不一致', $this->options->rootUrl))
            );
            $form->addInput($siteUrl->addRule('required', _t('请填写站点地址'))
                ->addRule('url', _t('请填写一个合法的URL地址')));
        }
        */

2.修改 pagedown.js 文件

具体位置:/admin/js/pagedown.js

打开后搜索 .replace(/^http:\/\/(https ,然后把后面的

(t = "http://" + t) 

修改成:

(t = "" + t)

3.相对路径.png

最后保存即可。

Ctrl+F5 刷新下缓存,本地上传的图片等附件即变成相对路径了。

附:关于这段代码的解析

return e ? t = null : (t = t.replace(/^http://(https?|ftp):///, "$1://"), /^(?:https?|ftp):///
.test(t) || /^[_a-z0-9-]+:/i.test(t) || (t = "http://" + t)), i.parentNode.removeChild(i),
n(t), !1

这段JavaScript代码是一个函数中的一行语句,它包含了条件运算符(ternary operator)和一些逻辑判断。我会逐步解释这段代码的含义:

  1. return e ? t = null : (t = t.replace(/^http:\/\/(https?|ftp):\/\//, "\$1://"), /^(?:https?|ftp):\/\// .test(t) || /^[_a-z0-9-]+:/i.test(t) || (t = "http://" + t)), i.parentNode.removeChild(i), n(t), !1
  2. 首先,这段代码包含了一个条件运算符 ? :,它的作用是根据条件 e 的值来决定返回什么值。如果 e 的值为真(truthy),则执行 t = null,否则执行后面的逻辑。
  3. 在条件运算符的第二部分,有一系列操作:

    • t = t.replace(/^http:\/\/(https?|ftp):\/\//, "\$1://"):这一部分是将t中以http://开头的部分替换为匹配到的https?|ftp,并且保留://部分。
    • ^(?:https?|ftp):\/\//.test(t):这一部分是检查t是否以http://https://或者ftp://开头。
    • ^[_a-z0-9-]+:/i.test(t):这一部分是检查t是否以字母、数字、下划线或连字符开头的协议格式。
    • t = "http://" + t:如果前面的两个条件都不满足,则在t前面添加http://
  4. 最后,代码执行了一系列操作后,移除了某个节点i,然后调用了函数n(t),最终返回了false

综合起来,这段代码的作用是根据条件e的真假对t进行一系列处理,包括替换http://开头的部分、检查协议格式,并最终返回处理后的t值。

typecho 相对路径 绝对路径
Theme Jasmine by Kent Liao