<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[ai]]></title><description><![CDATA[ai]]></description><link>https://b.yur.date</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Apr 2026 10:13:30 GMT</lastBuildDate><atom:link href="https://b.yur.date/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Markdown基本语法]]></title><description><![CDATA[一、标题
示例：
# 这是一级标题
## 这是二级标题
### 这是三级标题
#### 这是四级标题
##### 这是五级标题
###### 这是六级标题
效果如下：
这是一级标题
这是二级标题
这是三级标题
这是四级标题
这是五级标题
这是六级标题
二、字体
示例：
**这是加粗的文字**
*这是倾斜的文字*
***这是斜体加粗的文字***
~~这是加删除线的文字~~
效果如下：
这是加粗的文字
这是倾斜的文字
这是斜体加粗的文字
这是加删除线的文字
三、引用
示例：
>这是引用的内容
>>这...]]></description><link>https://b.yur.date/markdown</link><guid isPermaLink="true">https://b.yur.date/markdown</guid><dc:creator><![CDATA[fen yi]]></dc:creator><pubDate>Sun, 01 Aug 2021 11:38:08 GMT</pubDate><content:encoded><![CDATA[<h1 id="5lia44cb5qch6aky">一、标题</h1>
<p>示例：</p>
<pre><code><span class="hljs-comment"># 这是一级标题</span>
<span class="hljs-comment">## 这是二级标题</span>
<span class="hljs-comment">### 这是三级标题</span>
<span class="hljs-comment">#### 这是四级标题</span>
<span class="hljs-comment">##### 这是五级标题</span>
<span class="hljs-comment">###### 这是六级标题</span>
</code></pre><p>效果如下：</p>
<h1 id="6lz5piv5lia57qn5qch6aky">这是一级标题</h1>
<h2 id="6lz5piv5lqm57qn5qch6aky">这是二级标题</h2>
<h3 id="6lz5piv5lij57qn5qch6aky">这是三级标题</h3>
<h4 id="6lz5piv5zub57qn5qch6aky">这是四级标题</h4>
<h5 id="6lz5piv5lqu57qn5qch6aky">这是五级标题</h5>
<h6 id="6lz5piv5ywt57qn5qch6aky">这是六级标题</h6>
<h1 id="5lqm44cb5a2x5l2t">二、字体</h1>
<p>示例：</p>
<pre><code><span class="hljs-strong">**这是加粗的文字**</span>
<span class="hljs-emphasis">*这是倾斜的文字*</span>
<span class="hljs-strong">**<span class="hljs-emphasis">*这是斜体加粗的文字<span class="hljs-strong">**<span class="hljs-emphasis">*
~~这是加删除线的文字~~</span></span></span></span>
</code></pre><p>效果如下：
<strong>这是加粗的文字</strong></p>
<p><em>这是倾斜的文字</em></p>
<p><strong><em>这是斜体加粗的文字</em></strong></p>
<p>这是加删除线的文字</p>
<h1 id="5lij44cb5byv55so">三、引用</h1>
<p>示例：</p>
<pre><code>&gt;这是引用的内容
<span class="hljs-meta">&gt;&gt;</span>这是引用的内容
<span class="hljs-meta">&gt;&gt;</span>&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;这是引用的内容
</code></pre><p>效果如下：</p>
<blockquote>
<p>这是引用的内容</p>
<blockquote>
<p>这是引用的内容</p>
<blockquote>
<blockquote>
<blockquote>
<blockquote>
<blockquote>
<blockquote>
<blockquote>
<blockquote>
<p>这是引用的内容</p>
</blockquote>
</blockquote>
</blockquote>
</blockquote>
</blockquote>
</blockquote>
</blockquote>
</blockquote>
</blockquote>
</blockquote>
<h1 id="5zub44cb5yig5ymy57q">四、分割线</h1>
<p>示例：</p>
<pre><code><span class="hljs-meta">---</span>
<span class="hljs-string">----</span>
<span class="hljs-string">***</span>
<span class="hljs-string">*****</span>
</code></pre><h2 id="5pwi5p6c5aac5lil77ya">效果如下：</h2>
<hr />
<hr />
<hr />
<h1 id="5lqu44cb5zu54mh">五、图片</h1>
<p>示例：</p>
<pre><code>!<span class="hljs-selector-attr">[blockchain]</span>(<span class="hljs-attribute">https</span>:<span class="hljs-comment">//ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/</span>
u=<span class="hljs-number">702257389</span>,<span class="hljs-number">1274025419</span>&amp;fm=<span class="hljs-number">27</span>&amp;gp=<span class="hljs-number">0</span>.jpg <span class="hljs-string">"区块链"</span>)
</code></pre><p>效果如下：
<img src="https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/
u=702257389,1274025419&amp;fm=27&amp;gp=0.jpg" alt="blockchain" /></p>
<h1 id="5ywt44cb6laf6zo5o6l">六、超链接</h1>
<p>示例：</p>
<pre><code>[<span class="hljs-string">超链接名</span>](<span class="hljs-link">超链接地址 "超链接title"</span>)
title可加可不加
[<span class="hljs-string">简书</span>](<span class="hljs-link">http://jianshu.com</span>)
[<span class="hljs-string">百度</span>](<span class="hljs-link">http://baidu.com</span>)
</code></pre><p>效果如下：</p>
<p><a target="_blank" href="http://jianshu.com">简书</a></p>
<p><a target="_blank" href="http://baidu.com">百度</a></p>
<h1 id="5lid44cb5yix6kgo">七、列表</h1>
<h3 id="5peg5bqp5yix6kgo">无序列表</h3>
<p>语法：
无序列表用 - + * 任何一种都可以
示例：</p>
<pre><code><span class="hljs-bullet">-</span> 列表内容
<span class="hljs-bullet">+</span> 列表内容
<span class="hljs-bullet">*</span> 列表内容

注意：- + <span class="hljs-emphasis">* 跟内容之间都要有一个空格</span>
</code></pre><p>效果如下：</p>
<ul>
<li>列表内容</li>
<li>列表内容</li>
<li>列表内容</li>
</ul>
<p>###有序列表</p>
<p>语法：
数字加点
示例：</p>
<pre><code><span class="hljs-bullet">1.</span> 列表内容
<span class="hljs-bullet">2.</span> 列表内容
<span class="hljs-bullet">3.</span> 列表内容

注意：序号跟内容之间要有空格
</code></pre><p>效果如下：</p>
<ol>
<li>列表内容</li>
<li>列表内容</li>
<li>列表内容</li>
</ol>
<h3 id="5yix6kgo5bwm5awx">列表嵌套</h3>
<h4 id="5lik5lia57qn5zkm5lil5lia57qn5lml6ze05pwy5lij5liq56m65qc85y2z5yv">上一级和下一级之间敲三个空格即可</h4>
<ul>
<li>一级无序列表内容<ul>
<li>二级无序列表内容</li>
</ul>
</li>
</ul>
<h3 id="5ywr44cb6kgo5qc8">八、表格</h3>
<p>语法：</p>
<pre><code>表头|表头|表头
<span class="hljs-comment">---|:--:|---:</span>
内容|内容|内容
内容|内容|内容

第二行分割表头和内容。
<span class="hljs-deletion">- 有一个就行，为了对齐，多加了几个</span>
文字默认居左
<span class="hljs-deletion">-两边加：表示文字居中</span>
<span class="hljs-deletion">-右边加：表示文字居右</span>
注：原生的语法两边都要用 | 包起来。此处省略
</code></pre><p>示例：</p>
<pre><code>姓名<span class="hljs-params">|技能|</span>排行
--<span class="hljs-params">|:--:|</span>--:
刘备<span class="hljs-params">|哭|</span>大哥
关羽<span class="hljs-params">|打|</span>二哥
张飞<span class="hljs-params">|骂|</span>三弟
</code></pre><h3 id="5lmd44cb5luj56cb">九、代码</h3>
<p>语法：
单行代码：代码之间分别用一个反引号包起来</p>
<pre><code>    <span class="hljs-string">`代码内容`</span>
</code></pre><p>代码块：代码之间分别用三个反引号包起来，且两边的反引号单独占一行</p>
<pre><code>(<span class="hljs-string">``</span><span class="hljs-string">`)
  代码...
  代码...
  代码...
(`</span><span class="hljs-string">``</span>)
</code></pre><blockquote>
<p>注：为了防止转译，前后三个反引号处加了小括号，实际是没有的。这里只是用来演示，实际中去掉两边小括号即可。</p>
</blockquote>
<h3 id="5y2b44cb5rwb56il5zu">十、流程图</h3>
<pre><code>(```)
flow
st=&gt;start: 开始
op=&gt;operation: My Operation
cond=&gt;condition: Yes <span class="hljs-keyword">or</span> No?
e=&gt;end
st-&gt;op-&gt;cond
cond(yes)-&gt;e
cond(no)-&gt;op
&amp;
(```)
</code></pre>]]></content:encoded></item><item><title><![CDATA[使用CloudFlare Workers反代网站]]></title><description><![CDATA[镜像整个网站


// 替换成你想镜像的站点
const upstream = 'www.google.com'

// 如果那个站点有专门的移动适配站点，否则保持和上面一致
const upstream_mobile = 'www.google.com'

// 你希望禁止哪些国家访问
const blocked_region = ['RU']

// 禁止自访问
const blocked_ip_address = ['0.0.0.0', '127.0.0.1']

// 替换成你想镜像的站...]]></description><link>https://b.yur.date/cloudflare-workers</link><guid isPermaLink="true">https://b.yur.date/cloudflare-workers</guid><dc:creator><![CDATA[fen yi]]></dc:creator><pubDate>Sun, 01 Aug 2021 10:44:56 GMT</pubDate><content:encoded><![CDATA[<ul>
<li>镜像整个网站</li>
</ul>
<pre><code>
<span class="hljs-comment">// 替换成你想镜像的站点</span>
<span class="hljs-keyword">const</span> upstream = <span class="hljs-string">'www.google.com'</span>

<span class="hljs-comment">// 如果那个站点有专门的移动适配站点，否则保持和上面一致</span>
<span class="hljs-keyword">const</span> upstream_mobile = <span class="hljs-string">'www.google.com'</span>

<span class="hljs-comment">// 你希望禁止哪些国家访问</span>
<span class="hljs-keyword">const</span> blocked_region = [<span class="hljs-string">'RU'</span>]

<span class="hljs-comment">// 禁止自访问</span>
<span class="hljs-keyword">const</span> blocked_ip_address = [<span class="hljs-string">'0.0.0.0'</span>, <span class="hljs-string">'127.0.0.1'</span>]

<span class="hljs-comment">// 替换成你想镜像的站点</span>
<span class="hljs-keyword">const</span> replace_dict = {
    <span class="hljs-string">'$upstream'</span>: <span class="hljs-string">'$custom_domain'</span>,
    <span class="hljs-string">'//www.google.com'</span>: <span class="hljs-string">''</span>
}

<span class="hljs-comment">//以下内容都不用动</span>
addEventListener(<span class="hljs-string">'fetch'</span>, <span class="hljs-keyword">event</span> =&gt; {
    <span class="hljs-keyword">event</span>.respondWith(fetchAndApply(<span class="hljs-keyword">event</span>.request));
})

<span class="hljs-function"><span class="hljs-keyword">async</span> function <span class="hljs-title">fetchAndApply</span>(<span class="hljs-params">request</span>)</span> {

    <span class="hljs-keyword">const</span> region = request.headers.<span class="hljs-keyword">get</span>(<span class="hljs-string">'cf-ipcountry'</span>).toUpperCase();
    <span class="hljs-keyword">const</span> ip_address = request.headers.<span class="hljs-keyword">get</span>(<span class="hljs-string">'cf-connecting-ip'</span>);
    <span class="hljs-keyword">const</span> user_agent = request.headers.<span class="hljs-keyword">get</span>(<span class="hljs-string">'user-agent'</span>);

    <span class="hljs-keyword">let</span> response = <span class="hljs-literal">null</span>;
    <span class="hljs-keyword">let</span> url = <span class="hljs-keyword">new</span> URL(request.url);
    <span class="hljs-keyword">let</span> url_host = url.host;

    <span class="hljs-keyword">if</span> (url.protocol == <span class="hljs-string">'http:'</span>) {
        url.protocol = <span class="hljs-string">'https:'</span>
        response = Response.redirect(url.href);
        <span class="hljs-keyword">return</span> response;
    }

    <span class="hljs-keyword">if</span> (<span class="hljs-keyword">await</span> device_status(user_agent)) {
        upstream_domain = upstream
    } <span class="hljs-keyword">else</span> {
        upstream_domain = upstream_mobile
    }

    url.host = upstream_domain;

    <span class="hljs-keyword">if</span> (blocked_region.includes(region)) {
        response = <span class="hljs-keyword">new</span> Response(<span class="hljs-string">'Access denied: WorkersProxy is not available in your region yet.'</span>, {
            status: <span class="hljs-number">403</span>
        });
    } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span>(blocked_ip_address.includes(ip_address)){
        response = <span class="hljs-keyword">new</span> Response(<span class="hljs-string">'Access denied: Your IP address is blocked by WorkersProxy.'</span>, {
            status: <span class="hljs-number">403</span>
        });
    } <span class="hljs-keyword">else</span>{
        <span class="hljs-keyword">let</span> method = request.method;
        <span class="hljs-keyword">let</span> request_headers = request.headers;
        <span class="hljs-keyword">let</span> new_request_headers = <span class="hljs-keyword">new</span> Headers(request_headers);

        new_request_headers.<span class="hljs-keyword">set</span>(<span class="hljs-string">'Host'</span>, upstream_domain);
        new_request_headers.<span class="hljs-keyword">set</span>(<span class="hljs-string">'Referer'</span>, url.href);

        <span class="hljs-keyword">let</span> original_response = <span class="hljs-keyword">await</span> fetch(url.href, {
            method: method,
            headers: new_request_headers
        })

        <span class="hljs-keyword">let</span> original_response_clone = original_response.clone();
        <span class="hljs-keyword">let</span> original_text = <span class="hljs-literal">null</span>;
        <span class="hljs-keyword">let</span> response_headers = original_response.headers;
        <span class="hljs-keyword">let</span> new_response_headers = <span class="hljs-keyword">new</span> Headers(response_headers);
        <span class="hljs-keyword">let</span> status = original_response.status;

        new_response_headers.<span class="hljs-keyword">set</span>(<span class="hljs-string">'access-control-allow-origin'</span>, <span class="hljs-string">'*'</span>);
        new_response_headers.<span class="hljs-keyword">set</span>(<span class="hljs-string">'access-control-allow-credentials'</span>, <span class="hljs-literal">true</span>);
        new_response_headers.delete(<span class="hljs-string">'content-security-policy'</span>);
        new_response_headers.delete(<span class="hljs-string">'content-security-policy-report-only'</span>);
        new_response_headers.delete(<span class="hljs-string">'clear-site-data'</span>);

        <span class="hljs-keyword">const</span> content_type = new_response_headers.<span class="hljs-keyword">get</span>(<span class="hljs-string">'content-type'</span>);
        <span class="hljs-keyword">if</span> (content_type.includes(<span class="hljs-string">'text/html'</span>) &amp;&amp; content_type.includes(<span class="hljs-string">'UTF-8'</span>)) {
            original_text = <span class="hljs-keyword">await</span> replace_response_text(original_response_clone, upstream_domain, url_host);
        } <span class="hljs-keyword">else</span> {
            original_text = original_response_clone.body
        }

        response = <span class="hljs-keyword">new</span> Response(original_text, {
            status,
            headers: new_response_headers
        })
    }
    <span class="hljs-keyword">return</span> response;
}

<span class="hljs-function"><span class="hljs-keyword">async</span> function <span class="hljs-title">replace_response_text</span>(<span class="hljs-params">response, upstream_domain, host_name</span>)</span> {
    <span class="hljs-keyword">let</span> text = <span class="hljs-keyword">await</span> response.text()

    <span class="hljs-keyword">var</span> i, j;
    <span class="hljs-keyword">for</span> (i <span class="hljs-keyword">in</span> replace_dict) {
        j = replace_dict[i]
        <span class="hljs-keyword">if</span> (i == <span class="hljs-string">'$upstream'</span>) {
            i = upstream_domain
        } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (i == <span class="hljs-string">'$custom_domain'</span>) {
            i = host_name
        }

        <span class="hljs-keyword">if</span> (j == <span class="hljs-string">'$upstream'</span>) {
            j = upstream_domain
        } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (j == <span class="hljs-string">'$custom_domain'</span>) {
            j = host_name
        }

        <span class="hljs-keyword">let</span> re = <span class="hljs-keyword">new</span> RegExp(i, <span class="hljs-string">'g'</span>)
        text = text.replace(re, j);
    }
    <span class="hljs-keyword">return</span> text;
}

<span class="hljs-function"><span class="hljs-keyword">async</span> function <span class="hljs-title">device_status</span> (<span class="hljs-params">user_agent_info</span>)</span> {
    <span class="hljs-keyword">var</span> agents = [<span class="hljs-string">"Android"</span>, <span class="hljs-string">"iPhone"</span>, <span class="hljs-string">"SymbianOS"</span>, <span class="hljs-string">"Windows Phone"</span>, <span class="hljs-string">"iPad"</span>, <span class="hljs-string">"iPod"</span>];
    <span class="hljs-keyword">var</span> flag = <span class="hljs-literal">true</span>;
    <span class="hljs-keyword">for</span> (<span class="hljs-keyword">var</span> v = <span class="hljs-number">0</span>; v &lt; agents.length; v++) { <span class="hljs-keyword">if</span> (user_agent_info.indexOf(agents[v]) &gt; <span class="hljs-number">0</span>) {
            flag = <span class="hljs-literal">false</span>;
            <span class="hljs-keyword">break</span>;
        }
    }
    <span class="hljs-keyword">return</span> flag;
}
</code></pre><ul>
<li>镜像网站带密码访问</li>
</ul>
<pre><code><span class="hljs-comment">// 替换成你想镜像的站点</span>
<span class="hljs-keyword">const</span> upstream = <span class="hljs-string">'google.com'</span>

<span class="hljs-comment">// 如果那个站点有专门的移动适配站点，否则保持和上面一致</span>
<span class="hljs-keyword">const</span> upstream_mobile = <span class="hljs-string">'m.google.com'</span>

<span class="hljs-comment">// 密码访问</span>

<span class="hljs-keyword">const</span> openAuth = <span class="hljs-literal">false</span>
<span class="hljs-keyword">const</span> username = <span class="hljs-string">'username'</span>
<span class="hljs-keyword">const</span> password = <span class="hljs-string">'password'</span>

<span class="hljs-comment">// 你希望禁止哪些国家访问</span>
<span class="hljs-keyword">const</span> blocked_region = [<span class="hljs-string">'RU'</span>]

<span class="hljs-comment">// 禁止自访问</span>
<span class="hljs-keyword">const</span> blocked_ip_address = [<span class="hljs-string">'0.0.0.0'</span>, <span class="hljs-string">'127.0.0.1'</span>]

<span class="hljs-comment">// 替换成你想镜像的站点</span>
<span class="hljs-keyword">const</span> replace_dict = {
    <span class="hljs-string">'$upstream'</span>: <span class="hljs-string">'$custom_domain'</span>,
    <span class="hljs-string">'//google.com'</span>: <span class="hljs-string">''</span>
}

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">unauthorized</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> Response(<span class="hljs-string">'Unauthorized'</span>, {
    <span class="hljs-attr">headers</span>: {
      <span class="hljs-string">'WWW-Authenticate'</span>: <span class="hljs-string">'Basic realm="goindex"'</span>,
      <span class="hljs-string">'Access-Control-Allow-Origin'</span>: <span class="hljs-string">'*'</span>
    },
    <span class="hljs-attr">status</span>: <span class="hljs-number">401</span>
  });
}

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">parseBasicAuth</span>(<span class="hljs-params">auth</span>) </span>{
    <span class="hljs-keyword">try</span> {
      <span class="hljs-keyword">return</span> atob(auth.split(<span class="hljs-string">' '</span>).pop()).split(<span class="hljs-string">':'</span>);
    } <span class="hljs-keyword">catch</span> (e) {
      <span class="hljs-keyword">return</span> [];
    }
}

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">doBasicAuth</span>(<span class="hljs-params">request</span>) </span>{
  <span class="hljs-keyword">const</span> auth = request.headers.get(<span class="hljs-string">'Authorization'</span>);

  <span class="hljs-keyword">if</span> (!auth || !<span class="hljs-regexp">/^Basic [A-Za-z0-9._~+/-]+=*$/i</span>.test(auth)) {
    <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
  }

  <span class="hljs-keyword">const</span> [user, pass] = parseBasicAuth(auth);
  <span class="hljs-keyword">return</span> user === username &amp;&amp; pass === password;
}


<span class="hljs-keyword">async</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">fetchAndApply</span>(<span class="hljs-params">request</span>) </span>{
  <span class="hljs-keyword">if</span> (request.method === <span class="hljs-string">'OPTIONS'</span>) <span class="hljs-comment">// allow preflight request</span>
    <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> Response(<span class="hljs-string">''</span>, {
      <span class="hljs-attr">status</span>: <span class="hljs-number">200</span>,
      <span class="hljs-attr">headers</span>: {
        <span class="hljs-string">'Access-Control-Allow-Origin'</span>: <span class="hljs-string">'*'</span>,
        <span class="hljs-string">'Access-Control-Allow-Headers'</span>: <span class="hljs-string">'*'</span>,
        <span class="hljs-string">'Access-Control-Allow-Methods'</span>: <span class="hljs-string">'GET, POST, PUT, HEAD, OPTIONS'</span>
      }
    });

  <span class="hljs-keyword">if</span> (openAuth &amp;&amp; !doBasicAuth(request)) {
    <span class="hljs-keyword">return</span> unauthorized();
  }
    <span class="hljs-keyword">const</span> region = request.headers.get(<span class="hljs-string">'cf-ipcountry'</span>).toUpperCase();
    <span class="hljs-keyword">const</span> ip_address = request.headers.get(<span class="hljs-string">'cf-connecting-ip'</span>);
    <span class="hljs-keyword">const</span> user_agent = request.headers.get(<span class="hljs-string">'user-agent'</span>);

    <span class="hljs-keyword">let</span> response = <span class="hljs-literal">null</span>;
    <span class="hljs-keyword">let</span> url = <span class="hljs-keyword">new</span> URL(request.url);
    <span class="hljs-keyword">let</span> url_host = url.host;

    <span class="hljs-keyword">if</span> (url.protocol == <span class="hljs-string">'http:'</span>) {
        url.protocol = <span class="hljs-string">'https:'</span>
        response = Response.redirect(url.href);
        <span class="hljs-keyword">return</span> response;
    }

    <span class="hljs-keyword">if</span> (<span class="hljs-keyword">await</span> device_status(user_agent)) {
        upstream_domain = upstream
    } <span class="hljs-keyword">else</span> {
        upstream_domain = upstream_mobile
    }

    url.host = upstream_domain;

    <span class="hljs-keyword">if</span> (blocked_region.includes(region)) {
        response = <span class="hljs-keyword">new</span> Response(<span class="hljs-string">'Access denied: WorkersProxy is not available in your region yet.'</span>, {
            <span class="hljs-attr">status</span>: <span class="hljs-number">403</span>
        });
    } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span>(blocked_ip_address.includes(ip_address)){
        response = <span class="hljs-keyword">new</span> Response(<span class="hljs-string">'Access denied: Your IP address is blocked by WorkersProxy.'</span>, {
            <span class="hljs-attr">status</span>: <span class="hljs-number">403</span>
        });
    } <span class="hljs-keyword">else</span>{
        <span class="hljs-keyword">let</span> method = request.method;
        <span class="hljs-keyword">let</span> request_headers = request.headers;
        <span class="hljs-keyword">let</span> new_request_headers = <span class="hljs-keyword">new</span> Headers(request_headers);

        new_request_headers.set(<span class="hljs-string">'Host'</span>, upstream_domain);
        new_request_headers.set(<span class="hljs-string">'Referer'</span>, url.href);

        <span class="hljs-keyword">let</span> original_response = <span class="hljs-keyword">await</span> fetch(url.href, {
            <span class="hljs-attr">method</span>: method,
            <span class="hljs-attr">headers</span>: new_request_headers
        })

        <span class="hljs-keyword">let</span> original_response_clone = original_response.clone();
        <span class="hljs-keyword">let</span> original_text = <span class="hljs-literal">null</span>;
        <span class="hljs-keyword">let</span> response_headers = original_response.headers;
        <span class="hljs-keyword">let</span> new_response_headers = <span class="hljs-keyword">new</span> Headers(response_headers);
        <span class="hljs-keyword">let</span> status = original_response.status;

        new_response_headers.set(<span class="hljs-string">'access-control-allow-origin'</span>, <span class="hljs-string">'*'</span>);
        new_response_headers.set(<span class="hljs-string">'access-control-allow-credentials'</span>, <span class="hljs-literal">true</span>);
        new_response_headers.delete(<span class="hljs-string">'content-security-policy'</span>);
        new_response_headers.delete(<span class="hljs-string">'content-security-policy-report-only'</span>);
        new_response_headers.delete(<span class="hljs-string">'clear-site-data'</span>);

        <span class="hljs-keyword">const</span> content_type = new_response_headers.get(<span class="hljs-string">'content-type'</span>);
        <span class="hljs-keyword">if</span> (content_type.includes(<span class="hljs-string">'text/html'</span>) &amp;&amp; content_type.includes(<span class="hljs-string">'UTF-8'</span>)) {
            original_text = <span class="hljs-keyword">await</span> replace_response_text(original_response_clone, upstream_domain, url_host);
        } <span class="hljs-keyword">else</span> {
            original_text = original_response_clone.body
        }

        response = <span class="hljs-keyword">new</span> Response(original_text, {
            status,
            <span class="hljs-attr">headers</span>: new_response_headers
        })
    }
    <span class="hljs-keyword">return</span> response;
}

addEventListener(<span class="hljs-string">'fetch'</span>, <span class="hljs-function"><span class="hljs-params">event</span> =&gt;</span> {
    event.respondWith(fetchAndApply(event.request).catch(<span class="hljs-function"><span class="hljs-params">err</span> =&gt;</span> {
      <span class="hljs-built_in">console</span>.error(err);
      <span class="hljs-keyword">new</span> Response(<span class="hljs-built_in">JSON</span>.stringify(err.stack), {
        <span class="hljs-attr">status</span>: <span class="hljs-number">500</span>,
        <span class="hljs-attr">headers</span>: {
          <span class="hljs-string">'Content-Type'</span>: <span class="hljs-string">'application/json'</span>
        }
      });
    }));
})


<span class="hljs-keyword">async</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">replace_response_text</span>(<span class="hljs-params">response, upstream_domain, host_name</span>) </span>{
    <span class="hljs-keyword">let</span> text = <span class="hljs-keyword">await</span> response.text()

    <span class="hljs-keyword">var</span> i, j;
    <span class="hljs-keyword">for</span> (i <span class="hljs-keyword">in</span> replace_dict) {
        j = replace_dict[i]
        <span class="hljs-keyword">if</span> (i == <span class="hljs-string">'$upstream'</span>) {
            i = upstream_domain
        } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (i == <span class="hljs-string">'$custom_domain'</span>) {
            i = host_name
        }

        <span class="hljs-keyword">if</span> (j == <span class="hljs-string">'$upstream'</span>) {
            j = upstream_domain
        } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (j == <span class="hljs-string">'$custom_domain'</span>) {
            j = host_name
        }

        <span class="hljs-keyword">let</span> re = <span class="hljs-keyword">new</span> <span class="hljs-built_in">RegExp</span>(i, <span class="hljs-string">'g'</span>)
        text = text.replace(re, j);
    }
    <span class="hljs-keyword">return</span> text;
}

<span class="hljs-keyword">async</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">device_status</span> (<span class="hljs-params">user_agent_info</span>) </span>{
    <span class="hljs-keyword">var</span> agents = [<span class="hljs-string">"Android"</span>, <span class="hljs-string">"iPhone"</span>, <span class="hljs-string">"SymbianOS"</span>, <span class="hljs-string">"Windows Phone"</span>, <span class="hljs-string">"iPad"</span>, <span class="hljs-string">"iPod"</span>];
    <span class="hljs-keyword">var</span> flag = <span class="hljs-literal">true</span>;
    <span class="hljs-keyword">for</span> (<span class="hljs-keyword">var</span> v = <span class="hljs-number">0</span>; v &lt; agents.length; v++) { <span class="hljs-keyword">if</span> (user_agent_info.indexOf(agents[v]) &gt; <span class="hljs-number">0</span>) {
            flag = <span class="hljs-literal">false</span>;
            <span class="hljs-keyword">break</span>;
        }
    }
    <span class="hljs-keyword">return</span> flag;
}
</code></pre><ul>
<li>镜像网站指定目录</li>
</ul>
<pre><code><span class="hljs-comment">// 你要镜像的网站.</span>
<span class="hljs-keyword">const</span> upstream = <span class="hljs-string">'objectstorage.ap-seoul-1.oraclecloud.com'</span>

<span class="hljs-comment">// 镜像网站的目录，比如你想镜像某个网站的二级目录则填写二级目录的目录名，镜像 google 用不到，默认即可.</span>
<span class="hljs-keyword">const</span> upstream_path = <span class="hljs-string">'/test/'</span>

<span class="hljs-comment">// 镜像站是否有手机访问专用网址，没有则填一样的.</span>
<span class="hljs-keyword">const</span> upstream_mobile = <span class="hljs-string">'objectstorage.ap-seoul-1.oraclecloud.com'</span>

<span class="hljs-comment">// 屏蔽国家和地区.</span>
<span class="hljs-keyword">const</span> blocked_region = [<span class="hljs-string">''</span>]

<span class="hljs-comment">// 屏蔽 IP 地址.</span>
<span class="hljs-keyword">const</span> blocked_ip_address = [<span class="hljs-string">'0.0.0.0'</span>, <span class="hljs-string">'127.0.0.1'</span>]

<span class="hljs-comment">// 镜像站是否开启 HTTPS.</span>
<span class="hljs-keyword">const</span> https = <span class="hljs-literal">true</span>

<span class="hljs-comment">// 文本替换.填你要镜像的网站</span>
<span class="hljs-keyword">const</span> replace_dict = {
    <span class="hljs-string">'$upstream'</span>: <span class="hljs-string">'$custom_domain'</span>,
    <span class="hljs-string">'//objectstorage.ap-seoul-1.oraclecloud.com'</span>: <span class="hljs-string">''</span>
}

<span class="hljs-comment">// 以下保持默认，不要动</span>
addEventListener(<span class="hljs-string">'fetch'</span>, <span class="hljs-keyword">event</span> =&gt; {
    <span class="hljs-keyword">event</span>.respondWith(fetchAndApply(<span class="hljs-keyword">event</span>.request));
})

<span class="hljs-function"><span class="hljs-keyword">async</span> function <span class="hljs-title">fetchAndApply</span>(<span class="hljs-params">request</span>)</span> {

    <span class="hljs-keyword">const</span> region = request.headers.<span class="hljs-keyword">get</span>(<span class="hljs-string">'cf-ipcountry'</span>).toUpperCase();
    <span class="hljs-keyword">const</span> ip_address = request.headers.<span class="hljs-keyword">get</span>(<span class="hljs-string">'cf-connecting-ip'</span>);
    <span class="hljs-keyword">const</span> user_agent = <span class="hljs-string">"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"</span>

    <span class="hljs-keyword">let</span> response = <span class="hljs-literal">null</span>;
    <span class="hljs-keyword">let</span> url = <span class="hljs-keyword">new</span> URL(request.url);
    <span class="hljs-keyword">let</span> url_hostname = url.hostname;

    <span class="hljs-keyword">if</span> (https == <span class="hljs-literal">true</span>) {
        url.protocol = <span class="hljs-string">'https:'</span>;
    } <span class="hljs-keyword">else</span> {
        url.protocol = <span class="hljs-string">'http:'</span>;
    }

    <span class="hljs-keyword">if</span> (<span class="hljs-keyword">await</span> device_status(user_agent)) {
        <span class="hljs-keyword">var</span> upstream_domain = upstream;
    } <span class="hljs-keyword">else</span> {
        <span class="hljs-keyword">var</span> upstream_domain = upstream_mobile;
    }

    url.host = upstream_domain;
    <span class="hljs-keyword">if</span> (url.pathname == <span class="hljs-string">'/'</span>) {
        url.pathname = upstream_path;
    } <span class="hljs-keyword">else</span> {
        url.pathname = upstream_path + url.pathname;
    }

    <span class="hljs-keyword">if</span> (blocked_region.includes(region)) {
        response = <span class="hljs-keyword">new</span> Response(<span class="hljs-string">'Access denied: WorkersProxy is not available in your region yet.'</span>, {
            status: <span class="hljs-number">403</span>
        });
    } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (blocked_ip_address.includes(ip_address)) {
        response = <span class="hljs-keyword">new</span> Response(<span class="hljs-string">'Access denied: Your IP address is blocked by WorkersProxy.'</span>, {
            status: <span class="hljs-number">403</span>
        });
    } <span class="hljs-keyword">else</span> {
        <span class="hljs-keyword">let</span> method = request.method;
        <span class="hljs-keyword">let</span> request_headers = request.headers;
        <span class="hljs-keyword">let</span> new_request_headers = <span class="hljs-keyword">new</span> Headers(request_headers);

        new_request_headers.<span class="hljs-keyword">set</span>(<span class="hljs-string">'Host'</span>, url.hostname);
        new_request_headers.<span class="hljs-keyword">set</span>(<span class="hljs-string">'Referer'</span>, url.hostname);

        <span class="hljs-keyword">let</span> original_response = <span class="hljs-keyword">await</span> fetch(url.href, {
            method: method,
            headers: new_request_headers
        })

        <span class="hljs-keyword">let</span> original_response_clone = original_response.clone();
        <span class="hljs-keyword">let</span> original_text = <span class="hljs-literal">null</span>;
        <span class="hljs-keyword">let</span> response_headers = original_response.headers;
        <span class="hljs-keyword">let</span> new_response_headers = <span class="hljs-keyword">new</span> Headers(response_headers);
        <span class="hljs-keyword">let</span> status = original_response.status;

        new_response_headers.<span class="hljs-keyword">set</span>(<span class="hljs-string">'access-control-allow-origin'</span>, <span class="hljs-string">'*'</span>);
        new_response_headers.<span class="hljs-keyword">set</span>(<span class="hljs-string">'access-control-allow-credentials'</span>, <span class="hljs-literal">true</span>);
        new_response_headers.delete(<span class="hljs-string">'content-security-policy'</span>);
        new_response_headers.delete(<span class="hljs-string">'content-security-policy-report-only'</span>);
        new_response_headers.delete(<span class="hljs-string">'clear-site-data'</span>);

        <span class="hljs-keyword">const</span> content_type = new_response_headers.<span class="hljs-keyword">get</span>(<span class="hljs-string">'content-type'</span>);
        <span class="hljs-keyword">if</span> (content_type.includes(<span class="hljs-string">'text/html'</span>) &amp;&amp; content_type.includes(<span class="hljs-string">'UTF-8'</span>)) {
            original_text = <span class="hljs-keyword">await</span> replace_response_text(original_response_clone, upstream_domain, url_hostname);
        } <span class="hljs-keyword">else</span> {
            original_text = original_response_clone.body
        }

        response = <span class="hljs-keyword">new</span> Response(original_text, {
            status,
            headers: new_response_headers
        })
    }
    <span class="hljs-keyword">return</span> response;
}

<span class="hljs-function"><span class="hljs-keyword">async</span> function <span class="hljs-title">replace_response_text</span>(<span class="hljs-params">response, upstream_domain, host_name</span>)</span> {
    <span class="hljs-keyword">let</span> text = <span class="hljs-keyword">await</span> response.text()

    <span class="hljs-keyword">var</span> i, j;
    <span class="hljs-keyword">for</span> (i <span class="hljs-keyword">in</span> replace_dict) {
        j = replace_dict[i]
        <span class="hljs-keyword">if</span> (i == <span class="hljs-string">'$upstream'</span>) {
            i = upstream_domain
        } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (i == <span class="hljs-string">'$custom_domain'</span>) {
            i = host_name
        }

        <span class="hljs-keyword">if</span> (j == <span class="hljs-string">'$upstream'</span>) {
            j = upstream_domain
        } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (j == <span class="hljs-string">'$custom_domain'</span>) {
            j = host_name
        }

        <span class="hljs-keyword">let</span> re = <span class="hljs-keyword">new</span> RegExp(i, <span class="hljs-string">'g'</span>)
        text = text.replace(re, j);
    }
    <span class="hljs-keyword">return</span> text;
}


<span class="hljs-function"><span class="hljs-keyword">async</span> function <span class="hljs-title">device_status</span>(<span class="hljs-params">user_agent_info</span>)</span> {
    <span class="hljs-keyword">var</span> agents = [<span class="hljs-string">"Android"</span>, <span class="hljs-string">"iPhone"</span>, <span class="hljs-string">"SymbianOS"</span>, <span class="hljs-string">"Windows Phone"</span>, <span class="hljs-string">"iPad"</span>, <span class="hljs-string">"iPod"</span>];
    <span class="hljs-keyword">var</span> flag = <span class="hljs-literal">true</span>;
    <span class="hljs-keyword">for</span> (<span class="hljs-keyword">var</span> v = <span class="hljs-number">0</span>; v &lt; agents.length; v++) {
        <span class="hljs-keyword">if</span> (user_agent_info.indexOf(agents[v]) &gt; <span class="hljs-number">0</span>) {
            flag = <span class="hljs-literal">false</span>;
            <span class="hljs-keyword">break</span>;
        }
    }
    <span class="hljs-keyword">return</span> flag;
}
</code></pre><p>可替换</p>
<pre><code><span class="hljs-comment">// 目标网站</span>
<span class="hljs-keyword">const</span> upstream = <span class="hljs-string">'wwww.google.com'</span>

<span class="hljs-comment">// 目标网站路径</span>
<span class="hljs-keyword">const</span> upstream_path = <span class="hljs-string">'/'</span>

<span class="hljs-comment">// 打算为使用移动设备的用户检索的网站.</span>
<span class="hljs-keyword">const</span> upstream_mobile = <span class="hljs-string">'google.com'</span>

<span class="hljs-comment">// 您希望暂停服务的国家和地区</span>
<span class="hljs-keyword">const</span> blocked_region = []

<span class="hljs-comment">// 要阻止其使用服务的IP地址</span>
<span class="hljs-keyword">const</span> blocked_ip_address = [<span class="hljs-string">'0.0.0.0'</span>, <span class="hljs-string">'127.0.0.1'</span>]

<span class="hljs-comment">// 上游地址是否使用HTTPS协议</span>
<span class="hljs-keyword">const</span> https = <span class="hljs-literal">true</span>

<span class="hljs-comment">// 是否禁用缓存</span>
<span class="hljs-keyword">const</span> disable_cache = <span class="hljs-literal">false</span>

<span class="hljs-comment">// 替换文本</span>
<span class="hljs-comment">//格式：  '被替换':'替换'</span>
<span class="hljs-comment">//注意js结束的的逗号</span>
<span class="hljs-keyword">const</span> replace_dict = {
    <span class="hljs-string">'google.com'</span>:<span class="hljs-string">'google.com'</span>
}

<span class="hljs-keyword">let</span> data={}
addEventListener(<span class="hljs-string">'fetch'</span>, <span class="hljs-keyword">event</span> =&gt; {
    <span class="hljs-keyword">event</span>.respondWith(fetchAndApply(<span class="hljs-keyword">event</span>.request));
})

<span class="hljs-function"><span class="hljs-keyword">async</span> function <span class="hljs-title">fetchAndApply</span>(<span class="hljs-params">request</span>)</span> {
    <span class="hljs-keyword">const</span> region = request.headers.<span class="hljs-keyword">get</span>(<span class="hljs-string">'cf-ipcountry'</span>).toUpperCase();
    <span class="hljs-keyword">const</span> ip_address = request.headers.<span class="hljs-keyword">get</span>(<span class="hljs-string">'cf-connecting-ip'</span>);
    <span class="hljs-keyword">const</span> user_agent = request.headers.<span class="hljs-keyword">get</span>(<span class="hljs-string">'user-agent'</span>);

    <span class="hljs-keyword">let</span> response = <span class="hljs-literal">null</span>;
    <span class="hljs-keyword">let</span> url = <span class="hljs-keyword">new</span> URL(request.url);
    <span class="hljs-keyword">let</span> url_hostname = url.hostname;

    <span class="hljs-keyword">if</span> (https == <span class="hljs-literal">true</span>) {
        url.protocol = <span class="hljs-string">'https:'</span>;
    } <span class="hljs-keyword">else</span> {
        url.protocol = <span class="hljs-string">'http:'</span>;
    }

    <span class="hljs-keyword">if</span> (<span class="hljs-keyword">await</span> device_status(user_agent)) {
        <span class="hljs-keyword">var</span> upstream_domain = upstream;
    } <span class="hljs-keyword">else</span> {
        <span class="hljs-keyword">var</span> upstream_domain = upstream_mobile;
    }

    url.host = upstream_domain;
    <span class="hljs-keyword">if</span> (url.pathname == <span class="hljs-string">'/'</span>) {
        url.pathname = upstream_path;
    } <span class="hljs-keyword">else</span> {
        url.pathname = upstream_path + url.pathname;
    }

    <span class="hljs-keyword">if</span> (blocked_region.includes(region)) {
        response = <span class="hljs-keyword">new</span> Response(<span class="hljs-string">'拒绝访问: 您所在的地区不可用!'</span>, {
            status: <span class="hljs-number">403</span>
        });
    } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (blocked_ip_address.includes(ip_address)) {
        response = <span class="hljs-keyword">new</span> Response(<span class="hljs-string">'拒绝访问: 您的IP地址在Ban列表中!'</span>, {
            status: <span class="hljs-number">403</span>
        });
    } <span class="hljs-keyword">else</span> {
        <span class="hljs-keyword">let</span> method = request.method;
        <span class="hljs-keyword">let</span> request_headers = request.headers;
        <span class="hljs-keyword">let</span> new_request_headers = <span class="hljs-keyword">new</span> Headers(request_headers);

        new_request_headers.<span class="hljs-keyword">set</span>(<span class="hljs-string">'Host'</span>, upstream_domain);
        new_request_headers.<span class="hljs-keyword">set</span>(<span class="hljs-string">'Referer'</span>, url.protocol + <span class="hljs-string">'//'</span> + upstream_domain);



        <span class="hljs-keyword">if</span>(method == <span class="hljs-string">'POST'</span>){
            <span class="hljs-keyword">let</span> origin_formData = <span class="hljs-keyword">await</span> request.text()
            data = {
                method: method,
                headers: new_request_headers,
                body : origin_formData
            }
            console.log(data)
        }<span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span>(method == <span class="hljs-string">'GET'</span>){
            data = {
                method: method,
                headers: new_request_headers
            }
        }
        <span class="hljs-keyword">let</span> fuckKeys =  Object.fromEntries(new_request_headers)
        console.log(method)
        console.log(fuckKeys)
        <span class="hljs-keyword">let</span> original_response = <span class="hljs-keyword">await</span> fetch(url.href, data)

        connection_upgrade = new_request_headers.<span class="hljs-keyword">get</span>(<span class="hljs-string">"Upgrade"</span>);
        <span class="hljs-keyword">if</span> (connection_upgrade &amp;&amp; connection_upgrade.toLowerCase() == <span class="hljs-string">"websocket"</span>) {
            <span class="hljs-keyword">return</span> original_response;
        }

        <span class="hljs-keyword">let</span> original_response_clone = original_response.clone();
        <span class="hljs-keyword">let</span> original_text = <span class="hljs-literal">null</span>;
        <span class="hljs-keyword">let</span> response_headers = original_response.headers;
        <span class="hljs-keyword">let</span> new_response_headers = <span class="hljs-keyword">new</span> Headers(response_headers);
        <span class="hljs-keyword">let</span> status = original_response.status;

        <span class="hljs-keyword">if</span> (disable_cache) {
            new_response_headers.<span class="hljs-keyword">set</span>(<span class="hljs-string">'Cache-Control'</span>, <span class="hljs-string">'no-store'</span>);
        }

        new_response_headers.<span class="hljs-keyword">set</span>(<span class="hljs-string">'access-control-allow-origin'</span>, <span class="hljs-string">'*'</span>);
        new_response_headers.<span class="hljs-keyword">set</span>(<span class="hljs-string">'access-control-allow-credentials'</span>, <span class="hljs-literal">true</span>);
        new_response_headers.delete(<span class="hljs-string">'content-security-policy'</span>);
        new_response_headers.delete(<span class="hljs-string">'content-security-policy-report-only'</span>);
        new_response_headers.delete(<span class="hljs-string">'clear-site-data'</span>);

        <span class="hljs-keyword">if</span> (new_response_headers.<span class="hljs-keyword">get</span>(<span class="hljs-string">"x-pjax-url"</span>)) {
            new_response_headers.<span class="hljs-keyword">set</span>(<span class="hljs-string">"x-pjax-url"</span>, response_headers.<span class="hljs-keyword">get</span>(<span class="hljs-string">"x-pjax-url"</span>).replace(<span class="hljs-string">"//"</span> + upstream_domain, <span class="hljs-string">"//"</span> + url_hostname));
        }

        <span class="hljs-keyword">const</span> content_type = new_response_headers.<span class="hljs-keyword">get</span>(<span class="hljs-string">'content-type'</span>);
        <span class="hljs-keyword">if</span> (content_type != <span class="hljs-literal">null</span> &amp;&amp; content_type.includes(<span class="hljs-string">'text/html'</span>) &amp;&amp; content_type.includes(<span class="hljs-string">'UTF-8'</span>)) {
            original_text = <span class="hljs-keyword">await</span> replace_response_text(original_response_clone, upstream_domain, url_hostname);
        } <span class="hljs-keyword">else</span> {
            original_text = original_response_clone.body
        }

        response = <span class="hljs-keyword">new</span> Response(original_text, {
            status,
            headers: new_response_headers
        })
    }

    <span class="hljs-keyword">return</span> response;
}

<span class="hljs-function"><span class="hljs-keyword">async</span> function <span class="hljs-title">replace_form_data</span>(<span class="hljs-params">formData, upstream_domain, host_name</span>)</span> {
    <span class="hljs-keyword">let</span> text = <span class="hljs-keyword">await</span> response.text()

    <span class="hljs-keyword">var</span> i, j;
    <span class="hljs-keyword">for</span> (i <span class="hljs-keyword">in</span> replace_dict) {
        j = replace_dict[i]
        <span class="hljs-keyword">if</span> (i == <span class="hljs-string">'$upstream'</span>) {
            i = upstream_domain
        } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (i == <span class="hljs-string">'$custom_domain'</span>) {
            i = host_name
        }

        <span class="hljs-keyword">if</span> (j == <span class="hljs-string">'$upstream'</span>) {
            j = upstream_domain
        } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (j == <span class="hljs-string">'$custom_domain'</span>) {
            j = host_name
        }

        <span class="hljs-keyword">let</span> re = <span class="hljs-keyword">new</span> RegExp(i, <span class="hljs-string">'g'</span>)
        text = text.replace(re, j);
    }
    <span class="hljs-keyword">return</span> text;
}

<span class="hljs-function"><span class="hljs-keyword">async</span> function <span class="hljs-title">replace_response_text</span>(<span class="hljs-params">response, upstream_domain, host_name</span>)</span> {
    <span class="hljs-keyword">let</span> text = <span class="hljs-keyword">await</span> response.text()

    <span class="hljs-keyword">var</span> i, j;
    <span class="hljs-keyword">for</span> (i <span class="hljs-keyword">in</span> replace_dict) {
        j = replace_dict[i]
        <span class="hljs-keyword">if</span> (i == <span class="hljs-string">'$upstream'</span>) {
            i = upstream_domain
        } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (i == <span class="hljs-string">'$custom_domain'</span>) {
            i = host_name
        }

        <span class="hljs-keyword">if</span> (j == <span class="hljs-string">'$upstream'</span>) {
            j = upstream_domain
        } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (j == <span class="hljs-string">'$custom_domain'</span>) {
            j = host_name
        }

        <span class="hljs-keyword">let</span> re = <span class="hljs-keyword">new</span> RegExp(i, <span class="hljs-string">'g'</span>)
        text = text.replace(re, j);
    }
    <span class="hljs-keyword">return</span> text;
}


<span class="hljs-function"><span class="hljs-keyword">async</span> function <span class="hljs-title">device_status</span>(<span class="hljs-params">user_agent_info</span>)</span> {
    <span class="hljs-keyword">var</span> agents = [<span class="hljs-string">"Android"</span>, <span class="hljs-string">"iPhone"</span>, <span class="hljs-string">"SymbianOS"</span>, <span class="hljs-string">"Windows Phone"</span>, <span class="hljs-string">"iPad"</span>, <span class="hljs-string">"iPod"</span>];
    <span class="hljs-keyword">var</span> flag = <span class="hljs-literal">true</span>;
    <span class="hljs-keyword">for</span> (<span class="hljs-keyword">var</span> v = <span class="hljs-number">0</span>; v &lt; agents.length; v++) {
        <span class="hljs-keyword">if</span> (user_agent_info.indexOf(agents[v]) &gt; <span class="hljs-number">0</span>) {
            flag = <span class="hljs-literal">false</span>;
            <span class="hljs-keyword">break</span>;
        }
    }
    <span class="hljs-keyword">return</span> flag;
}
</code></pre>]]></content:encoded></item><item><title><![CDATA[excel的sheet1如何从sheet2单元格内获取信息]]></title><description><![CDATA[在sheet1中输入数据，需要在sheet1的A2输入司机的编号，在B2/C2/D2都可以显示想对应的资料，资料在sheet2中。


在sheet2中输入司机资料，以便sheet1通过vlookup函数提取对应资料。VLOOKUP(lookup_value,  table_array, col_index_num,  [range_lookup])。表述就是VLOOKUP(查找值，查找范围，查找列数，精确匹配或者近似匹配）




在sheet1中的B2中输入=vlookup（A2，  。表示...]]></description><link>https://b.yur.date/excelsheet1sheet2yuan</link><guid isPermaLink="true">https://b.yur.date/excelsheet1sheet2yuan</guid><dc:creator><![CDATA[fen yi]]></dc:creator><pubDate>Mon, 12 Jul 2021 12:27:35 GMT</pubDate><content:encoded><![CDATA[<ul>
<li><p>在sheet1中输入数据，需要在sheet1的A2输入司机的编号，在B2/C2/D2都可以显示想对应的资料，资料在sheet2中。
<img src="https://exp-picture.cdn.bcebos.com/430174fec314f1c5ddb0f0723c27ac5307889df1.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fformat%2Cf_jpg%2Fquality%2Cq_80" alt="1" /></p>
</li>
<li><p>在sheet2中输入司机资料，以便sheet1通过vlookup函数提取对应资料。VLOOKUP(lookup_value,  table_array, col_index_num,  [range_lookup])。表述就是VLOOKUP(查找值，查找范围，查找列数，精确匹配或者近似匹配）</p>
</li>
</ul>
<p><img src="https://exp-picture.cdn.bcebos.com/07c98f2ca5cadce8c016b14ffcf7980e5e2095f1.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fformat%2Cf_jpg%2Fquality%2Cq_80" alt="2" /></p>
<ul>
<li>在sheet1中的B2中输入=vlookup（A2，  。表示需要通过这个数值来查找想对应的资料。
<img src="https://exp-picture.cdn.bcebos.com/76b6860e5f20437109858793323acd8921c58ff1.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fformat%2Cf_jpg%2Fquality%2Cq_80" alt="3" /></li>
</ul>
<ul>
<li><p>通过VLOOKUP函数公式，在sheet1中的B2中输入=vlookup（A2，Sheet2!A1:D13    。这个是资料的查找范围。
<img src="https://exp-picture.cdn.bcebos.com/b87bd38920c5260fd46b6c39d2de4507890189f1.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fformat%2Cf_jpg%2Fquality%2Cq_80" alt="4" /></p>
</li>
<li><p>在sheet1中的B2中输入=vlookup（A2，Sheet2!A1:D13,2,      。2表示在范围内的第几列。
<img src="https://exp-picture.cdn.bcebos.com/dccb47de45078801592e64f2b18ca608a40f82f1.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fformat%2Cf_jpg%2Fquality%2Cq_80" alt="5" /></p>
</li>
<li><p>在sheet1中的B2中输入=vlookup（A2，Sheet2!A1:D13,2,1）。公式完成，1表示精确查找，0表示广泛查找。
<img src="https://exp-picture.cdn.bcebos.com/3931cb413a8ca608c051254fdb8c9bcec6f8fef1.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fformat%2Cf_jpg%2Fquality%2Cq_80" alt="6" /></p>
</li>
<li><p>在sheet1A2中输入2号司机可以看到B2中会显示sheet2中2号司机在B3的资料。
<img src="https://exp-picture.cdn.bcebos.com/a749bb0f94fc508cf390764b01775ddd894cfdf1.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fformat%2Cf_jpg%2Fquality%2Cq_80" alt="7" /></p>
</li>
<li><p>在sheet1C2中输入的公式和B2一样.显示效果如图.
<img src="https://exp-picture.cdn.bcebos.com/51cd85cec7f88a77368339ff6e4a2f27e6eff8f1.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fformat%2Cf_jpg%2Fquality%2Cq_80" alt="8" /></p>
</li>
<li><p>可以把A2或B2的公式往后拉,在D2中也能得到相应的资料,确保他们都是精确查找的对象或者列数即可.
<img src="https://exp-picture.cdn.bcebos.com/8b3643dd884ce54a4179565ca3066b0193ddf7f1.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fformat%2Cf_jpg%2Fquality%2Cq_80" alt="9" /></p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[cf pages]]></title><description><![CDATA[俄罗斯方块
https://github.com/Binaryify/vue-tetris
https://fkw.pages.dev
FC在线模拟器
https://github.com/lucaschn/fcgame
https://fcgame.pages.dev
壁纸站
https://github.com/insoxin/a
https://a.pages.dev
基于浏览器本地API的图片加水印、打码工具
https://github.com/joyqi/sfz
https://lb...]]></description><link>https://b.yur.date/cf-pages</link><guid isPermaLink="true">https://b.yur.date/cf-pages</guid><dc:creator><![CDATA[fen yi]]></dc:creator><pubDate>Sun, 13 Jun 2021 14:34:22 GMT</pubDate><content:encoded><![CDATA[<p>俄罗斯方块
https://github.com/Binaryify/vue-tetris
https://fkw.pages.dev
FC在线模拟器
https://github.com/lucaschn/fcgame
https://fcgame.pages.dev
壁纸站
https://github.com/insoxin/a
https://a.pages.dev
基于浏览器本地API的图片加水印、打码工具
https://github.com/joyqi/sfz
https://lb.pages.dev
IP 地址查询
https://github.com/nb5p/MyIP/tree/gh-pages
https://telegraph.pages.dev
云空调
https://github.com/YunYouJun/air-conditioner
https://myac.pages.dev
贪吃蛇
https://github.com/zkysimon/snake
https://s.pages.dev
播放器
https://github.com/qier222/YesPlayMusic
https://ao.pages.dev</p>
]]></content:encoded></item><item><title><![CDATA[Linux Web环境]]></title><description><![CDATA[国内版
宝塔最新的免费面板：http://www.bt.cn/
AMH – 4.2版免费：http://amh.sh/
WDCP 老牌免费面板：http://www.wdlinux.cn/bbs/（近来爆出严重安全漏洞）
自己的路 – 支持freeBSD：http://www.zijidelu.org/
国外版
VestaCP：http://vestacp.com/ （比较推荐的面板，自带中文）
Kloxo-MR：https://github.com/mustafaramadhan/kloxo/...]]></description><link>https://b.yur.date/linux-web</link><guid isPermaLink="true">https://b.yur.date/linux-web</guid><dc:creator><![CDATA[fen yi]]></dc:creator><pubDate>Sun, 13 Jun 2021 09:30:45 GMT</pubDate><content:encoded><![CDATA[<p>国内版
宝塔最新的免费面板：http://www.bt.cn/</p>
<p>AMH – 4.2版免费：http://amh.sh/</p>
<p>WDCP 老牌免费面板：http://www.wdlinux.cn/bbs/（近来爆出严重安全漏洞）</p>
<p>自己的路 – 支持freeBSD：http://www.zijidelu.org/</p>
<p>国外版
VestaCP：http://vestacp.com/ （比较推荐的面板，自带中文）</p>
<p>Kloxo-MR：https://github.com/mustafaramadhan/kloxo/ （7.0真的很强大，很好看，很实用，有中文包）</p>
<p>Webmin/Virtualmin：http://www.webmin.com/virtualmin.html （很稳定，很安全，自带中文）</p>
<p>Ispconfig：https://github.com/dclardy64/ISPConfig-3-Debian-Installer （官网没看懂这是一键包，有中文包）</p>
<p>i-MSCP：http://i-mscp.net/ （简单易用，自带中文）</p>
<p>EasySCP：http://www.easyscp.net/ （和i-MSCP一样来自Ispconfig，自带中文）</p>
<p>Ajenti：http://ajenti.org/ （轻量级，类似Webmin，自带中文）</p>
<p>zPanel(sentora)：http://www.zpanelcp.com/    http://www.sentora.org/（支持win，有中文包）</p>
<p>centos webpanel：http://centos-webpanel.com/ （据说比较有发展前途）</p>
<p>Froxlor：http://www.froxlor.org/ （很轻量的，适应各种环境）</p>
<p>AlternC：https://alternc.org/ （简单）</p>
<p>Easy Hosting Control Panel：http://ehcp.net/ （还不错的面板，有第三方汉化包）</p>
<p>CyberPanel面板：http://docs.cyberpanel.net/doku.php （目前只支持Centos 7.x）</p>
<p>宝塔英文版？http://www.aapanel.com</p>
<p>runcloud.io面板：https://runcloud.io （有免费版和付费版）</p>
<p>froxlor面板：https://www.froxlor.org/ (面板没有汉化)</p>
<p>一键安装包
国内版
http://lnmp.org/ （用的人很多，适应性很强）</p>
<p>https://oneinstack.com/ （用户也很多，博主一直使用这个）</p>
<p>http://teddysun.com/lamp （很好用的LAMP一键包） http://teddysun.com/lamp-yum （适合小内存≥64M）</p>
<p>http://bbs.aliyun.com/read/151729.html （阿里云论坛看到的）</p>
<p>http://blog.linuxeye.com/31.html  （多种配置，软件较新）</p>
<p>http://lnmpp.net/ （支持postgresql，支持ARM）</p>
<p>http://www.hhvmc.com/thread-17-1-1.html （有hhvm的一键包）</p>
<p>http://shuang.ca/llnmp/  http://llsmp.cn/（有LiteSpeed的一键包）</p>
<p>https://www.lxconfig.com/thread-69-1-1.html （有openresty的一键包）</p>
<p>http://blog.7qy.com/html/1575.html （有cherokee的一键包）</p>
<p>http://lamp.phpstudy.net/ （有Lighttpd的一键包）</p>
<p>http://www.upupw.net/ （Windows平台环境搭建）</p>
<p>https://www.appnode.com （免费版不支持面板）</p>
<p>http://www.ltmp.cc/ （LTMP支持CentOS/RadHat）</p>
<p>http://bet.xrbk.top/ （BET面板 支持CentOS）</p>
<p>国外版
http://centminmod.com/ （据说很适合wordpress）</p>
<p>https://vpssim.com/  （很强大的一键包）</p>
<p>http://tuxlite.com/ （适用于Debian系列）</p>
<p>https://github.com/Xeoncross/lowendscript  （lowendscript演变来的）</p>
<p>https://github.com/alexandreteles/monkeyServer（Monkey Web Server轻量级的web服务器）</p>
]]></content:encoded></item><item><title><![CDATA[heroku还有这些有趣的项目]]></title><description><![CDATA[部分项目使用插件需要信用卡，但是都是免费插件
Wordpress  ： https://elements.heroku.com/buttons/philippheuer/wordpress-heroku    试过
万能镜像站（墙内随便一台电脑无需配置工具一键访问国外网站）：  https://elements.heroku.com/buttons/binary-person/womginx   试过
theia（在线VSCode）：  https://github.com/bpmct/depl...]]></description><link>https://b.yur.date/heroku</link><guid isPermaLink="true">https://b.yur.date/heroku</guid><dc:creator><![CDATA[fen yi]]></dc:creator><pubDate>Sun, 13 Jun 2021 09:23:08 GMT</pubDate><content:encoded><![CDATA[<p>部分项目使用插件需要信用卡，但是都是免费插件</p>
<p>Wordpress  ： https://elements.heroku.com/buttons/philippheuer/wordpress-heroku    试过</p>
<p>万能镜像站（墙内随便一台电脑无需配置工具一键访问国外网站）：  https://elements.heroku.com/buttons/binary-person/womginx   试过</p>
<p>theia（在线VSCode）：  https://github.com/bpmct/deploy-code-server/blob/main/guides/heroku.md  试过</p>
<p>bitwarden： https://elements.heroku.com/buttons/mutouxia/bitwardenrs_heroku   试过</p>
<p>自建搜索引擎（Google的结果）：  https://elements.heroku.com/buttons/benbusby/whoogle-search     试过</p>
<p>OneManager：  https://github.com/qkqpttgf/OneManager-php    试过</p>
<p>cloudreve： https://elements.heroku.com/buttons/useblue/cloudreve-heroku</p>
<p>mega挂载：  https://elements.heroku.com/buttons/developeranaz/mega.nz-rclone-index-heroku</p>
<p>minecraft： https://elements.heroku.com/buttons/jkutner/heroku-buildpack-minecraft</p>
<p>RSSHub： https://elements.heroku.com/buttons/diygod/rsshub</p>
<p>有图比-dl（下载视频）：  https://elements.heroku.com/buttons/andrewstech/有图比-dl-api-server</p>
<p>hostloc签到Python脚本 之 Heroku 篇
https://github.com/laogui2008/heroku_hostloc_get_points2</p>
<p>Office 全局管理程序(PHP) Heroku 一键部署
https://github.com/testnobody/office_admin_heroku</p>
<p>用heroku搭建一个随机"色图"
https://dashboard.heroku.com/new ... 4740/randpic-heroku</p>
]]></content:encoded></item><item><title><![CDATA[epub书籍下载网站]]></title><description><![CDATA[#网站 #书籍 #资源
1、鸠摩搜索 (https://www.jiumodiary.com/)：除了资源多，鸠摩还贴心地按照不同的格式对书籍进行了分类；
2、电子书搜索 (https://ebook.chongbuluo.com/)： 快搜电子书搜索，有多个资源站点可选择
3、苦瓜书盘 (https://link.zhihu.com/?target=https%3A//www.kgbook.com/)：可下载到符合手机尺寸的电子书；
4、OpenStaxCNXLibrary (https://...]]></description><link>https://b.yur.date/epub</link><guid isPermaLink="true">https://b.yur.date/epub</guid><dc:creator><![CDATA[fen yi]]></dc:creator><pubDate>Thu, 10 Jun 2021 01:00:23 GMT</pubDate><content:encoded><![CDATA[<p>#网站 #书籍 #资源
1、鸠摩搜索 (https://www.jiumodiary.com/)：除了资源多，鸠摩还贴心地按照不同的格式对书籍进行了分类；</p>
<p>2、电子书搜索 (https://ebook.chongbuluo.com/)： 快搜电子书搜索，有多个资源站点可选择</p>
<p>3、苦瓜书盘 (https://link.zhihu.com/?target=https%3A//www.kgbook.com/)：可下载到符合手机尺寸的电子书；</p>
<p>4、OpenStaxCNXLibrary (https://cnx.org/browse)： 这是一个下载到国外教材的电子书网站；</p>
<p>5、好读 (http://www.haodoo.net/)：繁体字的界面，你应该知道它是哪儿的网站~一个推广中文电子书的公益网站，建站于2001年。</p>
<p>6、书格 (https://new.shuge.org/)： 可能是最好用的古籍资料下载网站；</p>
<p>7、云海电子书 (http://www.pdfbook.cn/)：站内书籍类型丰富、不管是小众、文学，还是励志成功，艺术摄影，计算机网络……你都可以在这里找到、并免费下载它的pdf版本；</p>
<p>8、PDF之家 (http://www.pdfzj.com/)： 拥有海量优质资源的PDF站点；</p>
<p>9、图灵社区 (https://www.ituring.com.cn/book?tab=free)： 国内最优质的技术书出版社之一，提供免费的技术电子书下载；</p>
<p>10、万千合集 (http://www.hejizhan.com/bbs/?kw=cad+)： 最专业的学术资源搜索引擎；</p>
<p>11、计算机书籍控 (http://bestcbooks.com/)： 最好的计算机书籍下载站点；</p>
<p>12、世界数字图书馆 (https://www.wdl.org/zh/)： 将在互联网上以多语种格式免费提供世界各地的重要材料,包括手稿、地图、珍本书籍、乐谱、录音、电影、印刷品、照片、建筑图等等；</p>
<p>13、采 书 (http://ebook.name/)： 一个免费电子书搜索引擎,为用户提供kindle电子书的搜索服务；</p>
<p>14、书享家 (http://shuxiangjia.cn/)： 电子书下载导航网站，提供优质的电子书搜索引擎、kindle下载站、PDF下载站、书单书评的入口导航。网站本身也会推荐一些优质的书单。</p>
<p>15、爱问共享资料 (http://ishare.iask.sina.com.cn/)： 资料搜索引擎。提供PPT、kindle书籍、PDF、Excel、DOC等各种格式的资料下载，内容齐全。</p>
<p>16、Sobooks (https://sobooks.cc/xiaoshuowenxue).：提供时间、文件格式、文件页数等维度搜索，快速定位到想要的文档</p>
<p>17、辣豆瓣 (http://www.ladouban.com/)： 只是这里虽然也免费，但是每天只能下载6本</p>
<p>18、 libgen (http://gen.lib.rus.ec/)： 这家应该是俄罗斯的ip，大部分英语书籍都可以在这里搜到，只是是pdf格式</p>
<p>19、電子爱好馆 (http://zlzazhi.com/)：</p>
<p>20、田间小站 (https://www.tjxz.cc/)：</p>
<p>21、EPUBEE (http://cn.epubee.com/books/): 号称最大的电子书网站。</p>
<p>22、E书联盟 (https://www.book118.com/)：</p>
<p>23、科塔学术 (https://site.sciping.com/)： 最专业、准确、及时、全面的科研与学术资源导航平台</p>
<p>24、若蓝格 (https://www.ifblue.net/)：杂志，各类书刊分享</p>
<p>25、万方数据 (http://www.wanfangdata.com.cn/index.html)： 知识服务平台，期刊、报告、论文、专利</p>
<p>26、上海图书馆家谱 (http://wrd2016.library.sh.cn/channel/stjp/)： 上海图书馆藏家谱古文</p>
<p>27、抗战文献数据平台 (http://www.modernhistory.org.cn/index.htm)： 抗日战争期间报刊文献资料</p>
<p>28、中国历代人物图像数据库 (http://diglweb.zjlib.cn:8081/zjtsg/mingren/index.htm)： 从夏商周开始历史人物画像资料</p>
<p>29、zi.1lib (https://zh.1lib.org/):全球最大的数字图书馆自2009年起的免费图书馆. 免费下载epub、pdf、mobi格式电子书支持转换为FB2、TXT、RTF等格式</p>
]]></content:encoded></item></channel></rss>