discuz加canonical URL标签,规范化网址
Discuz的网址规范化有很多问题,即同样的内容,有着好多不同的URL。下面使用canonical URL TAG新标准来处理这些问题。
一,给viewthread.php页加canonical URL
可以发现这种动态的链接形式最多了,有不同的参数但内容一样,当然现在的SE能够处理这些问题,但但很难判断首选显示URL方式,或者当他们都有返回链接时,不能集中权重。为了解决类似的重复网页问题,googel,yahoo,live,ask.com都宣布支持一个新的标签属性,以把链接和权重都集中到一个首先的URL上。
1.给viewthread.php加canonical URL标签,指定帖子的静态地址为首选版本。
修改viewthread.php文件,在$page = max($page, 1);上面(程序调用包含文件结束),加一行$extrahead .='<link rel=”canonical” href=”thread-‘ .$tid. ‘-1-1.html” />’;
2.给打印页加canonical tag
虽然打印页viewthread.php?action=printable…..也是调过这个程序生成数据,但用了不同的模板,要把变量$extrahead 加进去,修改tmplates\default\viewthread_printable.htm
在<head>部分<title>的下面加一行: $extrahead
二.给forumdisplay.php加canonical tag
在include template(‘forumdisplay’);上加一行:
$extrahead .='<link rel=”canonical” href=”forum-‘ .$fid. ‘-‘ .$page. ‘.html” />’;
三.为archiver页加link canonical标签
1.修改archiver/index.php:在global $boardurl, $_DCACHE, $charset, $navtitle, $headerbanner, $headernav;行下加一行:global $extrahead;
在<meta http-equiv=”Content-Type” content=”text/html; charset={$charset}” />
行下加一行:$extrahead
2.修改archiver\include\thread.inc.php:此文件中有两个showheader();,在第二个的上面加一行:$extrahead .='<link rel=”canonical” href=”thread-‘ .$tid. ‘-1-1.html” />’;
四.将archiver内容页最下的“本看完整版本”链接改为静态形式
修改archiver/include/thread.inc.php,将 “viewthread.php?tid=$tid”替换为”thread-{$tid}-1-1.html”
如果您是以动态URL形式为首先版本,上述相应位置应替换为如下语句:
$extrahead .='<link rel=”canonical” href=”viewthread.php?tid=’ .$tid. ‘” />’;
discuz禁止某个版帖子的收录
各种原因,需要禁止SE对discuz某个版面帖子的收录(如水版、或为了更好的SEO等)。当然如果设置了权限,不允许游浏览此版面,那么就肯定不能收录了。
1.使用robots.txt文件,禁止版块列表的收录
Disallow: /forum-1-
#数字即为要禁止版块的ID。
#注意数字最后的 – 不要省略,否则连ID为11,12等1开头的版都禁了
2.加meta robots标签,禁止收录某个版块帖子
修改viewthread.php文件,在$oldtopics = isset($_DCOOKIE[‘oldtopics’]) ? $_DCOOKIE[‘oldtopics’] : ‘D’; 上面加:
if( $thread['fid']==1 ){ $seohead .= '<meta name="robots" content="noindex,nofollow" />'; }
判断一下帖子是属于哪个版($thread[‘fid’])的,给它加上meta robots禁止。
第一点虽然禁止版块收录了,但有可能从动态形式或其它地方访问到帖子链接,所以还要用第二点给帖子页加上meta。这两点中的版块ID和要您禁止的版块对应,如果有多个版块,第一点中添加行就行了,第二点要修改断语句中中的逻辑表达式。
discuz论坛禁止无效页面的收录
discuz会产生哪些无效的页面,有什么问题
1.删除了的帖子、版块,当访问时返回帖子不存在的提示信息页。
2.设置了一定权限才能浏览的帖子、版块,很多情况会泄露链接,得到没权限的提示
3.其它各种情况下的提示信息页面。这些都是给用户看的,没有实质内容,都禁止收录。
其实最大的问题还是副本内容的问题,因这些不同的URL,返回的却是相同的内容。对SE不友好。其实对于删除了内容,应该返回404,但为了简单,都使用加meta robots标签,禁止ES收录的方法来解决。
修改提示信息页面,解决重复内容问题
方法一
1.建立/templates/defualt/header_norobot.htm文件
完全拷贝header.htm的内容,在<title>下再加一行:
<meta name=”robots” content=”noindex,nofollow” />
2.修改/templates/default/showmessage.htm文件
将{subtemplate header}替换为{subtemplate header_norobot}
3.修改/templates/default/nopermission.htm文件
将{subtemplate header}替换为{subtemplate header_norobot}
如此修改之后,SE就不会收录无权访问的URL,对于已删除的帖子,因为禁止收录了,过一段时间也会从索引中删除。这样,给SE的都是一些有内容的网页,对于提高权重会有好处。
方法二
修改global.func.php文件中的showmessage函数。
function showmessage($message, $url_forward = '', $extra = '', $forwardtype = 0) { extract($GLOBALS, EXTR_SKIP); global $hookscriptmessage, $extrahead, $discuz_uid, $discuz_action, $debuginfo, $seccode, $seccodestatus, $fid, $tid, $charset, $show_message, $inajax, $_DCACHE, $advlist; define('CACHE_FORBIDDEN', TRUE); $hookscriptmessage = $show_message = $message;$messagehandle = 0;
在第四行 define(‘CACHE_FORBIDDEN’, TRUE); 后面加上:
$extrahead .='';
即是
function showmessage($message, $url_forward = '', $extra = '', $forwardtype = 0) { extract($GLOBALS, EXTR_SKIP); global $hookscriptmessage, $extrahead, $discuz_uid, $discuz_action, $debuginfo, $seccode, $seccodestatus, $fid, $tid, $charset, $show_message, $inajax, $_DCACHE, $advlist; define('CACHE_FORBIDDEN', TRUE); $extrahead .='<meta name="robots" content="noindex,nofollow" />'; $hookscriptmessage = $show_message = $message;$messagehandle = 0;
discuz论坛的robots.txt文件设置
discuz论坛的robots.txt文件设置
User-agent: * Allow: /redirect.php Allow: /viewthread.php Allow: /forumdisplay.php Disallow: /? Disallow: /*.php
搜索引擎对robots.txt的支持情况
1. 对于allow 及 * $ 通佩符都支持,定义是一样的。
2.对于同一个User-agent 段内的 allow 和 disallow,匹配规则是不一样的。
google,baidu,sogou对于allow的优先级高,只要有allow允许,不管在段内什么位置,不管之前disallow设置如何,蜘蛛就会索引;
而live serch, yahoo对于allow和disallow的定义是平级的,按照从下到下的顺序只要匹配成功就退出。youdao未知
from:http://seo.banmutian.org/thread-2-1-1.html
.htaccess常用设置
.htaccess 文件 (Hypertext Access file) 是Apache Web服务器的一个非常强大的配置文件,对于这个文件,Apache有一堆参数可以让你配置出几乎随心所欲的能。.htaccess 配置文件坚持了Unix的一个文化——使用一个ASCII 的纯文本文件来配置你的网站的访问策略。
1. 创建自定义的出错页面
对于Linux Apache来说这是一项极其简单的事情。使用下面的.htaccess语法你可以轻松的完成这一功能。(把.htaccess放在你的网站根目录下)
ErrorDocument 401 /error/401.php ErrorDocument 403 /error/403.php ErrorDocument 404 /error/404.php ErrorDocument 500 /error/500.php
2. 设置网站的时区
SetEnv TZ America/Houston
3. 阻止IP列表
有些时候,你需要以IP地址的方式阻止一些访问。无论是对于一个IP地址还是一个网段,这都是一件非常简单的事情,如下所示:
allow from all deny from 145.186.14.122 deny from 210.10.56 #封禁210.10.56.0~210.10.56.255的所有IP地址
Apache对于被拒绝的IP会返回403错误。
4. 把一些老的链接转到新的链接上——搜索引擎优化SEO
Redirect 301 /iindex.php http://www.njava.com
5. 为服务器管理员设置电子邮件。
ServerSignature EMail SetEnv SERVER_ADMINdefault@domain.com
6. 使用.htaccess 访止盗链。
如果你网站上的一个图片被别的N多的网站引用了,那么,这很有可能会导致你服务器的性能下降,使用下面的代码可以保护某些热门的链接不被过多的引用。
Options +FollowSymlinks # Protect Hotlinking RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www.)?domainname.com/[nc] RewriteRule .*.(gif|jpg|png)$http://www.someonename.com/Article/UploadFiles/200908/20090824122550889.png[nc]
7. 阻止 User Agent 的所有请求
## .htaccess Code :: BEGIN ## Block Bad Bots by user-Agent SetEnvIfNoCase user-Agent ^FrontPage [NC,OR] SetEnvIfNoCase user-Agent ^Java.* [NC,OR] SetEnvIfNoCase user-Agent ^Microsoft.URL [NC,OR] SetEnvIfNoCase user-Agent ^MSFrontPage [NC,OR] SetEnvIfNoCase user-Agent ^Offline.Explorer [NC,OR] SetEnvIfNoCase user-Agent ^[Ww]eb[Bb]andit [NC,OR] SetEnvIfNoCase user-Agent ^Zeus [NC] Order Allow,Deny Allow from all Deny from env=bad_bot ## .htaccess Code :: END
8. 把某些特殊的IP地址的请求重定向到别的站点
ErrorDocument 403http://www.youdomain.com Order deny,allow Deny from all Allow from 124.34.48.165 Allow from 102.54.68.123
9. 直接找开文件而不是下载
通常,我们打开网上文件的时候总是会出现一个对话框问我们是下载还是直接打开,使用下面的设置就不会出现这个问题了,直接打开。
AddType application/octet-stream .pdf AddType application/octet-stream .zip AddType application/octet-stream .mov
10. 修改文件类型
下面的示例可以让任何的文件都成为PHP那么被服务器解释。比如:myphp, cgi,phtml等。
ForceType application/x-httpd-php SetHandler application/x-httpd-php
11. 阻止存取.htaccess 文件
# secure htaccess file order allow,deny deny from all
12. 保护服务器上的文件被存取
# prevent access of a certain fileorder allow,deny deny from all
13. 阻止目录浏览
# disable directory brow sing Options All -Indexes
14. 设置默认主页
# serve alternate default index page DirectoryIndex about.html
15. 口令认证
你可以创建一个文件用于认证。下面是一个示例:
# to protect a file AuthType Basic AuthName “Prompt” AuthUserFile /home/path/.htpasswd Require valid-user # password-protect a directory resides AuthType basic AuthName “This directory is protected” AuthUserFile /home/path/.htpasswd AuthGroupFile /dev/null Require valid-user
16. 把老的域名转像新的域名
# redirect from old domain to new domain RewriteEngine On RewriteRule ^(.*)$http://www.yourdomain.com/$1[R=301,L]
各大搜索引擎网站登录入口
Google:登录您的网站
http://www.google.com/intl/zh-CN/add_url.html
百度搜索帮助中心-网站登录
http://www.baidu.com/search/url_submit.html
雅虎网址大全_网站登录
http://site.yahoo.com.cn/feedback.html
蜜蜂导航搜索-网站提交
http://www.mifeng.cc/login.asp
如何向雅虎提交我的网
http://search.help.cn.yahoo.com/h4_4.html
alexa资料提交
http://www.alexa.com/site/help/webmasters
MSN提交URL
http://search.msn.com.cn/docs/submit.aspx
SOHU(搜狐)网站登记-搜狗免费网站登录
http://db.sohu.com/regurl/regform.asp
TOM搜索 >> 网站登录
http://search.tom.com/tools/weblog/log.php
Google网页目录
http://directory.google.com/Top/World/Chinese_Simplified/
蜜蜂导航
http://www.mifeng.cc
hao123网址之家
http://post.baidu.com/f?kw=hao123
爱问搜索
http://iask.com/guest/add_url.php
中国搜索
http://ads.zhongsou.com/register/page.jsp
天网搜索
http://home.tianwang.com/denglu.htm
排名
http://top.chinaz.com
Syntax Highlighter WordPress Plugin
wordpress高亮插件,使用方法:在HTML编辑模式下,用
<pre class=”brush:[code-alias]”> 你的代码 </pre> 即可。
很显然,Code-alias是所使用编程语言的名称,例如对于php有:
<pre class=”brush:[php]”> php 代码 </pre>
http://www.lastengine.com/syntax-highlighter-wordpress-plugin/
Overview
This is a wordpress syntax highlighting plugin. It is simple and probably one of the best syntax highlighters in the market. This plugin integrates Alex Gorbatchev’s Syntax Highlighter Tool Full Support for :
- Bash/shell
- C#
- C++
- CSS
- Delphi
- Diff
- Groovy
- JavaScript
- Java
- Perl
- PHP
- Plain Text
- Python
- Ruby
- Scala
- SQL
- Visual Basic
- XML
apache DDos防范模块 mod_evasive
什么是mod_evasive?
mod_evasive is an evasive maneuvers module for Apache to provide evasive action in the event of an HTTP DoS or DDoS attack or brute force attack. It is also designed to be a detection and network management tool, and can be easily configured to talk to ipchains, firewalls, routers, and etcetera. mod_evasive presently reports abuses via email and syslog facilities.
Detection is performed by creating an internal dynamic hash table of IP Addresses and URIs, and denying any single IP address from any of the following:
- Requesting the same page more than a few times per second
- Making more than 50 concurrent requests on the same child per second
- Making any requests while temporarily blacklisted (on a blocking list)
This method has worked well in both single-server script attacks as well as distributed attacks, but just like other evasive tools, is only as useful to the point of bandwidth and processor consumption (e.g. the amount of bandwidth and processor required to receive/process/respond to invalid requests), which is why it’s a good idea to integrate this with your firewalls and routers for maximum protection.
This module instantiates for each listener individually, and therefore has a built-in cleanup mechanism and scaling capabilities. Because of this per-child design, legitimate requests are never compromised (even from proxies and NAT addresses) but only scripted attacks. Even a user repeatedly clicking on ‘reload’ should not be affected unless they do it maliciously. mod_evasive is fully tweakable through the Apache configuration file, easy to incorporate into your web server, and easy to use.
官方网站:http://www.nuclearelephant.com/projects/mod_evasive/
原理
mod_evasive是apache防范DDOS攻击的模块,其原理大致如下:
有新访问到达时:
- 查看黑名单中是否有该客户IP。
- 将IP和请求URL一起HASH;查找HASH表看过去1秒是否连续请求同一页。
- 将IP和请求URL一起HASH;查找HASH表看过去1秒是否请求超过50个连接。
满足任意一条就返回403并阻止该IP一定时间,该时间由DOSSiteInterval决定。
1、安装mod_evasive
bear@bear-laptop:~$ sudo apt-get install libapache2-mod-e
libapache2-mod-encoding libapache2-mod-evasive
bear@bear-laptop:~$ sudo apt-get install libapache2-mod-evasive
[sudo] password for bear:
正在读取软件包列表… 完成
正在分析软件包的依赖关系树
正在读取状态信息… 完成
下列软件包是自动安装的并且现在不再被使用了:
linux-headers-2.6.31-14 linux-headers-2.6.31-14-generic
使用’apt-get autoremove’来删除它们
下列【新】软件包将被安装:
libapache2-mod-evasive
共升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 0 个软件未被升级。
需要下载 15.9kB 的软件包。
解压缩后会消耗掉 115kB 的额外空间。
获取:1 http://ubuntu.cn99.com karmic/universe libapache2-mod-evasive 1.10.1-1 [15.9kB]
下载 15.9kB,耗时 0 秒 (121kB/s)
选中了曾被取消选择的软件包 libapache2-mod-evasive。
(正在读取数据库 … 系统当前总共安装有 151313 个文件和目录。)
正在解压缩 libapache2-mod-evasive (从 …/libapache2-mod-evasive_1.10.1-1_amd64.deb) …
正在设置 libapache2-mod-evasive (1.10.1-1) …
* Reloading web server config apache2 apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1 for ServerName
[ OK ]
bear@bear-laptop:~$
2、配置mod_evasive
sudo vi /etc/apache/conf.d/mod_evasive
#添加以下:
<IfModule mod_evasive20.c> DOSHashTableSize 3097:定义哈希表大小。 DOSSiteCount 50:允许客户机的最大并发连接。 DOSPageCount 2:允许客户机访问同一页的间隔。 DOSPageInterval 1:网页访问计数器间隔。 DOSSiteInterval 1:全站访问计数器间隔。 DOSSiteInterval 60:加入黑名单后拒绝访问时间。 DOSEmailNotify crdd1130@gmail.com:有IP加入黑名单后通知管理员。 DOSSystemCommand "sudo iptables -A INPUT -s %s -j DROP":IP加入黑名单后执行的系统命令。 DOSLogDir "/tmp":锁定机制临时目录。 DOSWhiteList 127.0.0.1:防范白名单,不阻止白名单IP。 </IfModule>
SHELL下的数字比较及计算
比较:
方法一: if [ ${A} -lt ${B} ]; then …
这是最基本的比较方法,使用lt(小于),gt(大于),le(小于等于),ge(大于等于),优点:还没发现;缺点:只能比较整数,使用lt,gt等不直观
方法二: if ((${A} < ${B})) then …
这是CShell风格比较,优点:不用使用lt,gt等难记的字符串;缺点:还是只能比较整数
方法三: if (echo ${A} ${B} | awk ‘!($1>$2){exit 1}’) then …
这是使用awk比较,优点:可以比较小数;缺点:表达式太复杂,难记
方法四: if (echo ${A} – ${B} | bc -q | grep -q “^-“); then …
这是使用bc计算比较,优点:可以比较小数;缺点:表达式更复杂,难记
计算:
方法一:typeset C=$(expr ${A} + ${B});
SHELL中的基本工具,优点:方便检测变量是否为数字;缺点:只能计算整数,且只能计算加减法,不能计算乘除法
方法二:let “C=${A}+${B}”; 或 let “C=A+B”
内嵌命令计算,优点:能计算乘除法及位运算等;缺点:只能计算整数
方法三:typeset C=$((A+B))
CShell风格的计算,优点:能计算乘除法及位运算等,简介,编写方便;缺点:不能计算小数
方法四:typeset C=${echo ${A} ${B} | awk ‘{print $1+$2}’)
使用awk计算,优点:能计算小数,可以实现多种计算方式,计算灵活;缺点:表达式太复杂
方法五:typeset C=${echo ${A} + ${B} | bc -q)
使用awk计算,优点:能计算小数,计算方式比awk还多,计算灵活;缺点:表达式太复杂,小数点后面的位数必须使用scale=N来设置,否则可能会将结果截断为整数
查看Apache并发请求数及其TCP连接状态
# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
StartServers 10
MinSpareServers 10
MaxSpareServers 15
ServerLimit 2000
MaxClients 2000
MaxRequestsPerChild 10000
查看httpd进程数(即prefork模式下Apache能够处理的并发请求数):
Linux命令:
ps -ef | grep httpd | wc -l
返回结果示例:
1388
表示Apache能够处理1388个并发请求,这个值Apache可根据负载情况自动调整,我这组服务器中每台的峰值曾达到过2002。
查看Apache的并发请求数及其TCP连接状态:
Linux命令:
netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’
(这条语句是从新浪互动社区事业部技术总监王老大那儿获得的,非常不错)
返回结果示例:
LAST_ACK 5
SYN_RECV 30
ESTABLISHED 1597
FIN_WAIT1 51
FIN_WAIT2 504
TIME_WAIT 1057
其中的SYN_RECV表示正在等待处理的请求数;ESTABLISHED表示正常数据传输状态;TIME_WAIT表示处理完毕,等待超时结束的请求数。
关于TCP状态的变迁,可以从下图形象地看出:
状态:描述
CLOSED:无连接是活动的或正在进行
LISTEN:服务器在等待进入呼叫
SYN_RECV:一个连接请求已经到达,等待确认
SYN_SENT:应用已经开始,打开一个连接
ESTABLISHED:正常数据传输状态
FIN_WAIT1:应用说它已经完成
FIN_WAIT2:另一边已同意释放
ITMED_WAIT:等待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放
LAST_ACK:等待所有分组死掉