首页
留言板
关于本站
Search
1
实现网站页面秒开-预加载JS脚本instant.page
56,547 阅读
2
解决Windows连接PPTP/L2TP时无法连接上外网Internet的困扰
55,615 阅读
3
Typecho通过阿里邮件推送和LoveKKComment插件实现评论邮件通知
39,412 阅读
4
如何做到网页性能的极致优化?
29,682 阅读
5
回村无网络之-《无线网桥使用记》
29,588 阅读
路由交换
华为笔记
华三笔记
Mikrotik笔记
中兴笔记
Linux
Nginx
数据库
typecho
WordPress
资源分享
网站技术
Windows
other
未分类
登录
Search
标签搜索
路由交换
运维
linux
ROS
mikrotik
华为
软路由
WordPress
ospf
路由
网站
centos
php
ARP
交换
nssa
typecho
广播风暴
Nginx
dns
Ledo
累计撰写
61
篇文章
累计收到
1,024
条评论
首页
栏目
路由交换
华为笔记
华三笔记
Mikrotik笔记
中兴笔记
Linux
Nginx
数据库
typecho
WordPress
资源分享
网站技术
Windows
other
未分类
页面
留言板
关于本站
搜索到
8
篇与
的结果
2018-10-26
Simple Queue简单配置
功能包:system等级: Level 3操作路径: /queue simple在/queue simple创建一个流控配置项目,会分别有三个独立的队列,分别是 global-in, global-out和 global-total. 如果在/queue simple创建一个默认队列规则(无流控限制、queue type为默认),并且该队列没有子队列,即这样的队列实际上没有创建。如果队列只配置了upload/download流控属性,global-total队列可以被忽略。如果仔细观察,当建立一条queue simple规则同时在queue tree可以瞬间看到3条规则的建立,然后被隐藏到后台,即queue simple被建立在queue tree下。Simple queues是有序对队列即FIFO,每个数据包都必须经过每一个队列处理,直到最后一条队列规则,即如果有1000条队列,匹配的队列规则是排列在第1000条,那么数据包过经过前面999条后,才能到达该规则。 因此Simple queue在出现大量队列规则后,处理效率会降低。在v6大改动后,simple queue已经具备了和queue tree相同的等级流控功能。在v6前simple queue使用的是FIFO算法,后v6之后FIFO算法已经取消,优化了RouterOS在流控处理性能。 P2P流量队列 计划时间任务执行队列规则 优先级队列 从 /ip firewall mangle 使用多重包标记 双向流控(对上行和下行的带宽限制) 应用举例下面假设我们想要对网络192.168.0.0/24流量限制为:下行1Mb上行512kb,这里我们需要让服务器192.168.0.1不受流量控制。网络的基本设置如图:这里我们使用(simple queue)简单队列,首先我们配置RouterOS的IP地址、网关和NAT等基本网络参数:[admin@MikroTik] ip address> print Flags: X – disabled, I – invalid, D – dynamic # ADDRESS NETWORK BROADCAST INTERFACE 0 192.168.0.254/24 192.168.0.0 192.168.0.255 Local 1 10.5.8.104/24 10.5.8.0 10.5.8.255 Public [admin@MikroTik] ip address>路由配置:[admin@MikroTik] ip route> print Flags: X – disabled, A – active, D – dynamic, C – connect, S – static, r – rip, b – bgp, o – ospf # DST-ADDRESS G GATEWAY DISTANCE INTERFACE 0 ADC 10.5.8.0/24 Public 1 ADC 192.168.0.0/24 Local 2 A S 0.0.0.0/0 r 10.5.8.1 Public [admin@MikroTik] ip route>最后不要忘记在ip firewall nat中配置src-nat的伪装或nat,做地址转换操作。为网络192.168.0.0/24的所有客户端添加一个限制下载流量为2Mb上传流量1Mb的简单队列规则。[admin@MikroTik] queue simple> add name=Limit-Local target-address=192.168.0.0/24 max-limit=1000000/2000000 [admin@MikroTik] queue simple> print Flags: X – disabled, I – invalid, D – dynamic 0 name=”Limit-Local” target-addresses=192.168.0.0/24 dst-address=0.0.0.0/0 parent=none priority=8 queue=default/default limit-at=0/0 max-limit=1000000/2000000 total-queue=default [admin@MikroTik] queue simple>max-limit限制了最大可用带宽,从客户的角度看,参数target-addresses定义限制带宽的目标网络或者主机(也可以用逗号分隔开网络段或主机地址)。这里不想让服务器受到我们添加上面规则的任何流量限制,我们可以通过添加一个没有任何限制的规则(max-limit=0/0代表没有任何限制)并把它移到列表的顶部:[admin@MikroTik] queue simple> add name=Server target-addresses=192.168.0.1/32 [admin@MikroTik] queue simple> print Flags: X – disabled, I – invalid, D – dynamic 0 name=”Limit-Local” target-addresses=192.168.0.0/24 dst-address=0.0.0.0/0 parent=none priority=8 queue=default/default limit-at=0/0 max-limit=65536/131072 total-queue=default 1 name=”Server” target-addresses=192.168.0.1/32 dst-address=0.0.0.0/0 parent=none priority=8 queue=default/default limit-at=0/0 max-limit=0/0 total-queue=default使用move命令将第二条规则移动到第一条,即从编号1,移动到编号0,用于queue simple中FIFO的优先顺序(注意:v6.0后FIFO算法被取消,所以不存在move命令)[admin@MikroTik] queue simple> move 1 0 [admin@MikroTik] queue simple> print Flags: X – disabled, I – invalid, D – dynamic 0 name=”Server” target-addresses=192.168.0.1/32 dst-address=0.0.0.0/0 parent=none priority=8 queue=default/default limit-at=0/0 max-limit=0/0 total-queue=default 1 name=”Limit-Local” target-addresses=192.168.0.0/24 dst-address=0.0.0.0/0 parent=none priority=8 queue=default/default limit-at=0/0 max-limit=65536/131072 total-queue=default [admin@MikroTik] queue simple>
2018年10月26日
7,048 阅读
0 评论
0 点赞
2018-10-26
近期Mikrotik-RouterOS的几个漏洞说明
关于WEB 服务的漏洞WikiLeaks 开始使用一个新的代号 Vault 7 作为美国中情局(CIA)的敏感信息披露计划,这次被发布的第一份档案 Year Zero 大小高达 513MB,一共包含 8,761 份相关敏感文档。根据维基解密的阐述,这份包含了大量 0day,恶意软件,病毒,木马以及相关文档的高度机密资料,在美国政府黑客和承包商之间传播,其中有人向维基解密提交了这份绝密档案的部分内容。关于www服务器的漏洞,是从2017年维基解密公布新的代号 Vault 7的文档,据维基解密的阐述,这份包含了大量 0day,恶意软件,病毒,木马以及相关文档的高度机密资料,在美国政府黑客和承包商之间传播,其中有人向维基解密提交了这份绝密档案的部分内容。如果没有防火墙来保护www服务,该漏洞直接影响到RouterOS的webfig网页配置接口,MikroTik修改该漏洞从6.37.5 Bugfix 版本和6.38.5 发行版本,这两个版本都是在2017年3月9日发布该漏洞后来被几个恶意攻击利用,并且影响到之前未修复的RouterOS,以及将www服务端口(TCP 80端口)开放给不信任网络RouterOS系统。1、VPNfilter在2018年5月22日,MikroTik接到Cisco通知,一个恶意工具VPNfilter在多个网络设备中被发现,其中包括三款MikroTik的设备。MikroTik高度重视,该恶意软件通过RouterOS的一个漏洞安装进系统,但在2017年3月,MikroTik已经修补过该漏洞,被攻击的是老版本的RouterOS。因此建议尽快升级RouterOS最新版本,如果有更多关于该漏洞的消息请与MikroTik联系(support@mikrotik.com)。如果你运行的RouterOS版本是在2017年3月之前(6.37.5 bugifx版本和6.38.5发行版本),并且允许不信任网络访问设备的www服务(TCP 80端口)P.S: VPNfilter这个名字只是被发现的恶意软件的代号(更具体地说,是一个假的可执行名称),这个工具的执行方式与VPN隧道没有关联. 从基本的角度看,恶意软件可以嗅探某些类型的流量,并将其发送到某个地方,或者让路由器系统崩溃。2、流氓僵尸工具近期MikroTik官方注意到,一款流氓僵尸网络正在扫描随机的公共IP地址,以找到那些打开Winbox(TCP 8291)和WWW(TCP 80)端口的RouterOS,并利用以上描述的几个漏洞进行恶意攻击。注意Winbox与该漏洞没有关系,只是利用winbox的端口来识别MikroTik的RouterOS设备,当识别到后,会继续尝试通过TCP 80端口攻击如果在最近一年时间未升级过RouterOS,强烈的建议升级你的RouterOS设备,仅需要在winbox中打开/system packages 点击check for updates,选择Download&install,即可升级(确保RouterOS能正常连接网络,并在ip->dns下配置好dns服务器)对于80端口的RouterOS如何确定是否安全?– 如果你在最近一年内升级了RouterOS,是安全的 – 如果你在ip service关闭掉了www服务,是安全的 – 如果你有防火墙配置保护TCP 80端口,确保配置正确,是安全的 – 如果你的Hotspot只对局域网服务,但Webfig不能访问,是安全的 – 如果你的User Manager只对局域网服务,但Webfig不能访问,是安全的. – 如果你修改了Winbox默认端口,你可以幸免不会被扫描到,但并不代表不会被感染 – 如果你关闭Winbox端口,你可以幸免不会被扫描到,但并不代表不会被感染 – 如果”ip service”的 “allowed-from” 参数设置了信任网络,在信任网络内没有被感染设备,是安全的 – 如果Webfig仅局域网可访问,需要小心被局域网感染设备所利用如果保护?1、升级RouterOS最新版本,升级方式:Winbox中打开/system packages 点击check for updates,选择Download&install 升级 2、修改你的RouterOS所有管理员密码 3、根据MikroTik官方指南保护你的设备,下面是官方提供的保护路由器的防火墙规则介绍 https://wiki.mikrotik.com/wiki/Manual:Securing_Your_Router 如果监测?– 升级到6.38.5或更高版本,将会删除掉漏洞文件,修改密码,安全之前提到的方法保护到TCP 80端口 – 如果你升级设备后,仍然能看通过telnet或其他方式非法访问你的路由器,请打开Tool/torch工具,找到攻击源,但你本地网络的其他设备被感染,也请及时做出升级处理和安全措施关于Winbox漏洞RouterOS发现一个新的漏洞,针对RouterOS v6.29以后的版本,从6.29到6.43rc3受到该漏洞影响。这个漏洞与之前的TCP 80端口不同,这个是直接针对Winbox 8291端口漏洞说明:该漏洞通过一个特定的工具连接winbox端口(tcp/8291),并获取系统管理员的数据文件,从而得到RouterOS的登录账号和密码。受影响版本:6.29到6.43rc3受到该漏洞影响,从v6.40.8、v6.42.1和v6.43rc4修复该漏洞,请大家及时更新版本! 升级完成后,及时更改密码升级操作:/system packages 点击check for updates,选择Download&install 升级
2018年10月26日
7,892 阅读
0 评论
0 点赞
2018-10-26
多种环境下的WordPress伪静态配置
IIS7.5完美伪静态规则IIS 环境是 Windows 主机常用的服务器环境,但网上很多规则其实并不完美,很多地方依旧有些无法设置的地方,但这个却可以,新建两个 txt 文件,将下面的代码分别添加到文件中:第一个 web.config<configuration> <system.webServer> <rewrite> <rules> <rule name="ChineseURL" stopProcessing="true"> <match url="^(tag|category)/(.*)$" /> <action type="Rewrite" url="ihuanurl.php"/> </rule> <rule name="wordpress" patternSyntax="Wildcard"> <match url="*" /> <conditions> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> </conditions> <action type="Rewrite" url="index.php" /> </rule> </rules> </rewrite> </system.webServer> </configuration>第二个辅助文件 ihuanurl.php:<?php // IIS Mod-Rewrite if (isset($_SERVER['HTTP_X_ORIGINAL_URL'])) { $_SERVER['REQUEST_URI'] = $_SERVER['HTTP_X_ORIGINAL_URL']; } // IIS Isapi_Rewrite else if (isset($_SERVER['HTTP_X_REWRITE_URL'])) { $_SERVER['REQUEST_URI'] = $_SERVER['HTTP_X_REWRITE_URL']; } else { // Use ORIG_PATH_INFO if there is no PATH_INFO if ( !isset($_SERVER['PATH_INFO']) && isset($_SERVER['ORIG_PATH_INFO']) ) $_SERVER['PATH_INFO'] = $_SERVER['ORIG_PATH_INFO']; // Some IIS + PHP configurations puts the script-name in the path-info (No need to append it twice) if ( isset($_SERVER['PATH_INFO']) ) { if ( $_SERVER['PATH_INFO'] == $_SERVER['SCRIPT_NAME'] ) $_SERVER['REQUEST_URI'] = $_SERVER['PATH_INFO']; else $_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_NAME'] . $_SERVER['PATH_INFO']; } // Append the query string if it exists and isn't null if (isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING'])) { $_SERVER['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING']; } } require("index.php"); ?>然后保存文件,上传到WordPress站点的根目录即可。IIS6伪静态规则IIS 环境是 Windows 主机常用的服务器环境,新建一个 txt 文件,将下面的代码添加到文件中:[ISAPI_Rewrite] # Defend your computer from some worm attacks #RewriteRule .*(?:global.asa|default\.ida|root\.exe|\.\.).* . [F,I,O] # 3600 = 1 hour CacheClockRate 3600 RepeatLimit 32 # Protect httpd.ini and httpd.parse.errors files # from accessing through HTTP # Rules to ensure that normal content gets through RewriteRule /tag/(.*) /index\.php\?tag=$1 RewriteRule /software-files/(.*) /software-files/$1 [L] RewriteRule /images/(.*) /images/$1 [L] RewriteRule /sitemap.xml /sitemap.xml [L] RewriteRule /favicon.ico /favicon.ico [L] # For file-based wordpress content (i.e. theme), admin, etc. RewriteRule /wp-(.*) /wp-$1 [L] # For normal wordpress content, via index.php RewriteRule ^/$ /index.php [L] RewriteRule /(.*) /index.php/$1 [L]然后另存为 httpd.ini 文件,上传到WordPress站点的根目录即可。Apache伪静态规则Apache是 Linux 主机下常见的环境,现在一般的 Linux 虚拟主机都采用这种环境。新建一个 htaccess.txt 文件,添加下面的代码:<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>然后上传到 WordPress 站点的根目录,重命名为 .htaccess 即可(在win下是不可能这样命名的)Nginx伪静态规则Nginx环境一般是Linux 主机 VPS或服务器用户用的比较多,这些用户一般都会自己配置Nginx,或者有专门的人帮你配置,打开 nginx.conf 或者某个站点的配置环境,比如 wpdaxue.com.conf(不同人配置的不一样),在 server { } 大括号里面添加下面的代码:location / { if (-f $request_filename/index.html){ rewrite (.*) $1/index.html break; } if (-f $request_filename/index.php){ rewrite (.*) $1/index.php; } if (!-f $request_filename){ rewrite (.*) /index.php; } }保存,重启 Nginx 即可。
2018年10月26日
5,506 阅读
1 评论
0 点赞
2018-10-23
VMware ESXI 迁移至KVM
1.1.1 ESXI将虚拟机导出 导出ova模板 将导出的ova模板导入到KVM环境中。1.1.2 配置KVM环境安装所需要的组件[root@clsn7 ~]# yum install libvirt* virt-* qemu-kvm* -y配置桥接网卡[root@clsn7 ~]# virsh iface-bridge eth1 br1 使用附加设备 br1 生成桥接 eth1 失败 已启动桥接接口 br11.1.3 导入虚拟机启动kvm管理程序,并设置开机自启动[root@clsn7 ~]# systemctl start libvirtd.service [root@clsn7 ~]# systemctl enable libvirtd.service创建虚拟机存放目录[root@clsn7 ~]# virt-v2v -i ova centos-dev-test01-v2v.ova -o local -os /vmhost/dev/dev-test01 -of qcow2 [ 0.0] Opening the source -i ova centos-dev-test01-v2v.ova virt-v2v: warning: making OVA directory public readable to work around libvirt bug https://bugzilla.redhat.com/1045069 [ 23.1] Creating an overlay to protect the source from being modified [ 23.4] Initializing the target -o local -os /vmhost/dev/dev-test01 [ 23.4] Opening the overlay [ 41.4] Inspecting the overlay [ 57.5] Checking for sufficient free disk space in the guest [ 57.5] Estimating space required on target for each disk [ 57.5] Converting CentOS release 6.9 (Final) to run on KVM virt-v2v: This guest has virtio drivers installed. [ 178.6] Mapping filesystem data to avoid copying unused and blank areas [ 178.9] Closing the overlay [ 179.4] Checking if the guest needs BIOS or UEFI to boot [ 179.4] Assigning disks to buses [ 179.4] Copying disk 1/1 to /vmhost/dev/dev-test01/centos-dev-test01-v2v-sda (qcow2) (100.00/100%) [ 216.1] Creating output metadata [ 216.1] Finishing off 导入完成后在 /vmhost/dev/dev-test01 目录下会生成文件 [root@clsn7 dev-test01]# pwd /vmhost/dev/dev-test01 [root@clsn7 dev-test01]# ls centos-dev-test01-v2v-sda centos-dev-test01-v2v.xml修改网卡配置修改网卡source network 为桥接修改网卡使用virtio[root@clsn7 dev-test01]# cat centos-dev-test01-v2v.xml <?xml version='1.0' encoding='utf-8'?> <domain type='kvm'> <!-- generated by virt-v2v 1.36.3rhel=7,release=6.el7_4.3,libvirt --> <name>centos-dev-test01-v2v</name> <memory unit='KiB'>524288</memory> <currentMemory unit='KiB'>524288</currentMemory> <vcpu>1</vcpu> <features> <acpi/> <apic/> </features> <os> <type arch='x86_64'>hvm</type> </os> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <devices> <disk type='file' device='disk'> <driver name='qemu' type='qcow2' cache='none'/> <source file='/vmhost/dev/dev-test01/centos-dev-test01-v2v-sda'/> <target dev='vda' bus='virtio'/> </disk> <disk device='cdrom' type='file'> <driver name='qemu' type='raw'/> <target dev='hda' bus='ide'/> </disk> <disk device='floppy' type='file'> <driver name='qemu' type='raw'/> <target dev='fda'/> </disk> <interface type='bridge'> <source bridge='br1'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> <video> <model type='qxl' ram='65536' heads='1'/> </video> <graphics type='vnc' autoport='yes' port='-1'/> <input type='tablet' bus='usb'/> <input type='mouse' bus='ps2'/> <console type='pty'/> </devices> </domain>1.1.4 启动虚拟机导入主机[root@clsn7 dev-test01]# virsh define centos-dev-test01-v2v.xml 定义域 centos-dev-test01-v2v(从 centos-dev-test01-v2v.xml)查看主机列表[root@clsn7 dev-test01]# virsh list --all Id 名称 状态 ---------------------------------------------------- - centos-dev-test01-v2v 关闭启动主机[root@clsn7 dev-test01]# virsh start centos-dev-test01-v2v 域 centos-dev-test01-v2v 已开始1.1.5 测试可用性登陆迁移后的虚拟机测试[root@clsn7 ~]# ssh root@192.168.19.123 The authenticity of host '192.168.19.123 (192.168.19.123)' can't be established. RSA key fingerprint is SHA256:iRmghFzgRIJy5+v8p4lqi8DyUG8F0hXR/qNdDZ2J6RY. RSA key fingerprint is MD5:37:b8:56:3b:b7:85:fa:cb:d9:55:a7:44:d5:de:f8:d9. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.19.123' (RSA) to the list of known hosts. root@192.168.19.123's password: Last login: Mon Mar 5 10:30:02 2018 from 192.168.19.9 [root@dev-test01 ~]# hostname -I 192.168.19.123设置虚拟机开机自启动。[root@clsn7 ~]# virsh autostart centos-dev-test01-v2v 域 centos-dev-test01-v2v标记为自动开始至此第一台机器的迁移完成,后续按照相同的方式将其他的虚拟机进行迁移即可。.
2018年10月23日
9,323 阅读
1 评论
0 点赞
2018-10-23
服务做两台Exchange CAS的集群配置完NLB后发现同网段访问正常跨网段不通
问题描述:微软的NLB(网络负载均衡)服务做两台Exchange CAS(Client Access Server)的集群,配置完NLB后发现同网段访问正常,跨网段都无法访问,甚至在NLB网段的网关上都无法访问。拓扑如下:故障截图:处理过程:1.首先尝试从网关S7700上ping NLB虚地址10.16.68.254,发现不通。同网段都不通,最常见的原因就是没有对应的ARP记录。2.然后在网关上查看10.16.68.254的ARP记录,发现果然没有学习到。3.在同网段某台服务器上通过arp –a查看10.16.68.254的ARP记录,发现是组播MAC 03bf-xxxx-xxxx。一般在设备没有启用组播服务或者IGMP监听的情况下,网关设备是不处理组播ARP对应的报文的。根因根据MAC地址的规范,最高位是1时代表组播地址,0是为单播地址。所以0x03开头的地址为组播地址,网络设备在没有启用组播和IGMP侦听的情况下,网关设备不处理组播ARP对应的报文的。由于缺少二层ARP解析,造成三层无法ping通。解决方案通过在网关上手工静态绑定ARP记录。建议与总结根据MAC地址的规范,0x01,03,05,07开头的都是组播MAC地址,而我们最熟悉的组播MAC地址为01-00-5e开头,由此可能会造成思维定式,认为只有01-00-5e开头才是组播MAC。 有
2018年10月23日
9,856 阅读
5 评论
1 点赞
2018-10-23
华为BFD功能简单配置
BFD:Bidirectional Forwarding Detection,双向转发检查作用:毫秒级故障检查,通常结合三层协议(如静态路由、vrrp、ospf、BGP等)实现链路故障快速检查。bfd 全局使能BFDbfd 1 bind peer-ip 12.1.1.2 source-ip 12.1.1.1 配置BFD组1 discriminator local 1 本地标识1 标识需要互为对称 discriminator remote 2 远端标识2 commit 确认提交 静态路由调用BFDip route-static 0.0.0.0 0.0.0.0 23.1.1.2 track bfd-session 1OSPF调用BFDospf 1 bfd all-interfaces enable .
2018年10月23日
10,399 阅读
2 评论
0 点赞
2018-10-07
wordpress获取各类页面链接的函数总结
在WordPress项目开发过程,很可能需要获取WordPress 各类页面的链接,包括首页、文章页、Page页面、存档页面等等,今天倡萌就简单分享下获取 WordPress 各类页面的链接的方法。获取文章或页面链接直接输出文章或页面的链接: <?php the_permalink(); ?> 返回文章或页面的链接,以供调用: get_permalink(); 可以使用 echo 输出,结果和直接使用 the_permalink() 一样: <?php echo get_permalink(); ?> 获取存档页面链接 function get_current_archive_link( $paged = true ) { $link = false; if ( is_front_page() ) { $link = home_url( '/' ); } else if ( is_home() && "page" == get_option('show_on_front') ) { $link = get_permalink( get_option( 'page_for_posts' ) ); } else if ( is_tax() || is_tag() || is_category() ) { $term = get_queried_object(); $link = get_term_link( $term, $term->taxonomy ); } else if ( is_post_type_archive() ) { $link = get_post_type_archive_link( get_post_type() ); } else if ( is_author() ) { $link = get_author_posts_url( get_query_var('author'), get_query_var('author_name') ); } else if ( is_archive() ) { if ( is_date() ) { if ( is_day() ) { $link = get_day_link( get_query_var('year'), get_query_var('monthnum'), get_query_var('day') ); } else if ( is_month() ) { $link = get_month_link( get_query_var('year'), get_query_var('monthnum') ); } else if ( is_year() ) { $link = get_year_link( get_query_var('year') ); } } } if ( $paged && $link && get_query_var('paged') > 1 ) { global $wp_rewrite; if ( !$wp_rewrite->using_permalinks() ) { $link = add_query_arg( 'paged', get_query_var('paged'), $link ); } else { $link = user_trailingslashit( trailingslashit( $link ) . trailingslashit( $wp_rewrite->pagination_base ) . get_query_var('paged'), 'archive' ); } } return $link; } 该函数可以输出首页、分类法(自定义分类法、标签、分类)、自定义文章类型的存档页面、作者存档页面、日期存档页面 的链接,包含分页。获取当前页面链接如果你不想判断页面类型,只想输出当前页面的链接,可以使用下面的代码: <?php global $wp; $current_url = home_url(add_query_arg(array(),$wp->request)); echo $current_url; ?> 好了,暂且说到这里。如果大家有什么补充,欢迎留言分享,谢谢。参考资料:http://wordpress.stackexchange.com/questions/29512/permalink-for-category-pages-and-postshttp://stephenharris.info/how-to-get-the-current-url-in-wordpress/
2018年10月07日
5,431 阅读
1 评论
0 点赞
2018-10-07
wordpress各种获取url函数
站点路径相关函数home_url()返回站点路径,相当于后台设置->常规中的”站点地址(URL)”。$url = home_url();echo $url;//输出: http://www.itgol.cn $url = home_url('/images/');echo $url;//输出:http://www.itgol.cn/images/site_url()如果WordPress安装在域名根目录下,则该函数与home_url()相同。如果WordPress安装在子目录下,例如http://www.itgol.cn/,则site_url()返回WordPress实际安装地址,相当于后台->设置->常规中的“WordPress 地址(URL)”。$url = site_url();echo $url;//假设WordPress安装在http://www.itgol.cn下//输出:http://www.itgol.cnadmin_url()返回后台地址,传递参数后也可返回后台menu的地址$url = admin_url();echo $url;//输出:http://www.itgol.cn/wp-admin/content_url()返回实际的wp-content目录,如果是默认安装,且装在根目录下,则如下所示$url = content_url();echo $url;//输出:http://www.itgol.cn/wp-content如果在wp-config.php中改变了wp-content目录的位置,则该函数会返回正确地址,例如wp-config.php中如下定义define('WP_CONTENT_DIR','/home/user/public_html/cdn');define('WP_CONTENT_URL','http://sola-cdn.me');则content_url()的返回值为http://sola-cdn.meincludes_url()返回当前WordPress站点存放核心文件的目录wp-includes的地址,可以带一个$path作为参数。$url = includes_url( '/js/');echo $url;//输出:http://www.itgol.cn/wp-includes/js/wp_upload_dir()返回WordPress上传目录的地址,是一个数组,包含一系列与上传地址相关的信息。<?php $upload_dir = wp_upload_dir(); ?>提供如下信息给你 ‘path’ – 上传目录的服务器绝对路径,通常以反斜杠(/)开头 ‘url’ – 上传目录的完整URL ‘subdir’ – 子目录名称,通常是以年/月形式组织的目录地址,例如/2012/07 ‘basedir’ – 上传目录的服务器绝对路径,不包含子目录 ‘baseurl’ – 上传目录的完整URL,不包含子目录 ‘error’ – 报错信息. 例如$upload_dir = wp_upload_dir();echo $upload_dir['baseurl'];//输出:http://www.itgol.cn/wp-content/uploads 主题路径相关函数get_theme_root_uri()获取存放主题的目录URIecho get_theme_root_uri();//输出:http://www.itgol.cn/wp-content/themesget_theme_root()获取存放主题的目录的服务器绝对路径echo get_theme_root();//输出:<tt>/home/user/public_html/wp-content/themes</tt>get_theme_roots()获取主题目录的目录名称,如果你的主题目录是/wp-content/themes,则echo get_theme_roots();//输出:/themesget_stylesheet_directory()获取当前启用的主题目录的服务器绝对路径,例如/home/user/public_html/wp-content/themes/twentyeleven可以用来include文件,例如<?phpinclude( get_stylesheet_directory() . ‘/includes/myfile.php’); ?>get_stylesheet_directory_uri()获取当前启用的主题目录的URI,例如echo get_stylesheet_directory_uri();//输出:http://www.itgol.cn/wp-content/themes/twentyeleven可以使用在需要主题目录URI的场合,例如图片<img src="<?php echo get_stylesheet_directory_uri() ?>/images/aternus.png" alt="wordpress各种获取url函数总结" alt="" title="" width="" height="" />get_template_directory_uri()如果当前启用的主题是一个child theme,该函数返回parent theme的主题目录URI,用法与get_stylesheet_directory_uri()类似。get_template_directory()如果当前启用的主题是一个child theme,该函数返回parent theme的主题目录的服务器绝对路径,用法与get_stylesheet_directory()类似。get_template()获取当前启用主题的主题目录名称,例如现在启用的主题为twentyeleven,则echo get_stylesheet();//输出:twentyelevenget_stylesheet()获取当前启用主题的主题目录名称,与get_template()的区别是,如果用了child theme,则返回child theme的目录名称。 插件路径相关函数plugins_url()获取当前插件的目录的URI,例如一个插件位于/wp-content/plugins/myplugin下,该目录下放有插件的主文件名为myplugin.php,在myplugin.php中执行下面的代码,结果如下echo plugins_url();//输出:http://www.itgol.cn/wp-content/plugins echo plugins_url('',__FILE__);//输出:http://www.itgol.cn/wp-content/plugins/myplugin echo plugins_url('js/myscript.js',__FILE__);//输出:http://www.itgol.cn/wp-content/plugins/myplugin/js/myscript.jsplugin_dir_url()返回当前插件的目录URI,例如echo plugin_dir_url(__FILE__ );//输出:http://www.itgol.cn/wp-content/plugins/myplugin/注意结尾有反斜杠。plugin_dir_path()返回当前插件目录的服务器绝对路径,例如echo plugin_dir_path(__FILE__ );//输出:/home/user/public_html/wp-content/plugins/myplugin/可以用来引用文件,例如<?phpdefine('MYPLUGINNAME_PATH', plugin_dir_path(__FILE__) );require MYPLUGINNAME_PATH . 'includes/class-metabox.php';require MYPLUGINNAME_PATH . 'includes/class-widget.php';?>plugin_basename()返回调用该函数的插件文件名称(包含插件路径)例如在插件myplugin下的myplugin.php文件中调用该函数,结果如下echo plugin_basename(__FILE__);//输出:myplugin/myplugin.php如果在myplugin/include/test.php文件中调用(test.php通过include引用到myplugin.php中),结果如下echo plugin_basename(__FILE__);//输出:myplugin/include/test.php 路径相关常量WordPress中还有一组用define定义的常量代表路径。WP_CONTENT_DIRwp-content目录的服务器绝对路径,例如/home/user/public_html/wp-contentWP_CONTENT_URLwp-content目录的URI地址,例如http://www.itgol.cn/wp-contentWP_PLUGIN_DIR插件目录的服务器绝对路径,例如/home/user/public_html/wp-content/pluginsWP_PLUGIN_URL插件目录的URI地址,例如http://www.itgol.cn/wp-content/pluginsTEMPLATEPATH当前启用主题目录的服务器绝对路径,相当于get_template_directory()例如/home/user/public_html/wp-content/themes/twentyelevenSTYLESHEETPATH当前启用主题目录的服务器绝对路径,相当于get_stylesheet_directory(),与TEMPLATEPATH的区别在于如果使用child theme,该常量指向child theme目录。
2018年10月07日
5,047 阅读
0 评论
0 点赞