标签 "htaccess" 下的文章

最近浏览有关互联网的资讯多了,发现了一个不少人提到的问题,为什么网址结尾会加上反斜杠呢?又为什么我们在浏览器地址栏上打出一个网址(如我的主页piaoyun.cc),按回车后地址末尾会自动加上一个反斜杠(部分浏览器如chorme会自动隐藏网址末尾的反斜杠)。很诡异是吧!好了,进入正题,推广一下小知识。

在传统意义上说,网址末尾是没有反斜杠的。有没有反斜杠的意义在于该url是指向一个文件还是一个目录,例如:
http://piaoyun.cc/piaoyun 指向的是网站根目录下一个名为piaoyun的文件
http://piaoyun.cc/piaoyun/ 指向的是网站根目录下一个名为piaoyun的目录

于是在网址末尾加了反斜杠是能加快网站载入,因为网址末尾加了反斜杠会直接告知浏览器现在指向的是一个目录,浏览器就能直接读取该目录下如index或home等默认文件。而没有加上反斜杠时浏览器首先会尝试读取根目录下的一个文件,如果没有该文件再查找一个与该文件同名的目录,最后才读取目录下的默认文件。这样一来加上反斜杠就会加快网站加载速度。对于网站所在的服务器,网址没有加上反斜杠会给服务器增加一个查找是否有同名文件的过程,这明显会增加服务器的负担,当然这个影响并不会很大,但如果你的网站的直接流量很大,那么给url末尾加上反斜杠便能较大的减轻服务器的负担了。

当然给网址末尾加上反斜杠还有其他的好处:1.在seo方面考虑,习惯性的给自己网站的网址末尾加上反斜杠能避免重复内容。正如域名中是否带”www”的问题,url末尾是否有反斜杠也会造成重复内容的问题,这对于网站的seo无疑是不利的,要知道,重复内容绝对是seo的大忌。
2.因为服务器对url不能正确解析,有可能会出现404错误,习惯地给网址末尾加上反斜杠则可以避免这种情况。

总的来说给网址末尾加上反斜杠对对网站建设者是有很大好处的,这可以说是网站建设者应该养成的一个好习惯。当然,在交换友情链接时别忘了提醒一下对方,记得为你的网站url末尾加上反斜杠了。

为什么很多网站都是采用在网址的结尾后加上反斜杠,比如百度 sina都是这样的处理方法。为什么要给网址结尾加上反斜杠,这样做对于用户体验,以及速度优化有什么好处呢。

网站使用反斜杠和不使用反斜杠的区别不加斜杠指向的是网站根目录下一个名为的文件,加了斜杠指向的是网站根目录下一个名为的目录,也就是目录与文件的区别

 

首页网站使用反斜杠的好处使用斜杠能加快网站载入,原因是因为网址末尾加了反斜杠会直接告知浏览器现在指向的是一个目录,目录的话会直接读取index。或者home等默认文件。没有加上反斜杠时浏览器首先会尝试读取根目录下的一个文件,如果没有该文件再查找一个与该文件同名的目录,最后才读取目录下的默认文件。网址没有加上反斜杠会给服务器增加一个查找是否有同名文件的过程.

seo方面考虑
网站只存在带斜杠的模式,避免网站权重流失(和不带www和带www的概念相同)。同时有另外一种理解:有加了是一个文件夹 默认情况下应该是目录的权重大于网站页面权重

最后附上Apache开启自动将不同的url以301重定向至一个标准的url上的.htaccess代码(前提是你的服务器开启了mod_rewrite,至于IIS,就没有方便的方法去实现这个功能了):

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://piaoyun.cc/$1/ [L,R=301]

说明:
* RewriteCond %{REQUEST_FILENAME} !-f : 指定操作仅针对目录,对指向文件的url不进行rewrite操作;
* RewriteCond %{REQUEST_URI} !(.*)/$ :判断url是否以斜杠“/”结尾;
* RewriteRule ^(.*)$ http://piaoyun.cc/$1/ [L,R=301] : 自动将符合上述条件的url以301跳转重定向至以斜杠结尾的版本,比如说将“http://piaoyun.cc/piaoyun”重定向至 “http://piaoyun.cc/piaoyun/”,其中“L”指该行为规则的最后一行,而“R=301”则指明采用301 Redirect。当然,您在使用时应将“http://piaoyun.cc/”替换成自己网站的url。

当然我的网站并没有对于该使用目录的时候使用目录,当时是处于扁平状网站布局考虑而有所失误。而现在想要修改对于网站结构变动较大而不是很现实所以还是以后考虑进一步修改。

Nginx设置301重定向相对还是比较容易的,301永久重定向不仅能使页面实现自动跳转,而且对于搜索引擎来说,可以传递网站权重、收录以及PR值等。下面我们就详细说说Linux下Nginx设置301重定向的方法:

首先将多个域名指向同一web目录,代码如下:

server_name www.piaoyun.cc piaoyun.cc;

二、我们说下Nginx设置域名301重定向中常用的2种方法:

第一种方法是判断nginx核心变量host(老版本是http_host),适用于绑定多个域名,都相同用途的重定向:

server {
server_name www.piaoyun.cc piaoyun.cc;
if ($host != 'piaoyun.cc' ) {
rewrite ^/(.*)$ http://piaoyun.cc/$1 permanent;
}
...
}

第二种方法,适用于多个域名,但有域名有其他用途不需要重定向的情况:

server {
server_name www.piaoyun.cc piaoyun.cc download.piaoyun.cc;
if ($host = 'www.piaoyun.cc' ) {
rewrite ^/(.*)$ http://piaoyun.cc/$1 permanent;
}
...
}

上面的download.piaoyun.cc为频道域名,不需要重定向。

这两种方法中, permanent是关键,详细见下面nginx重定向规则说明。
last – 基本上都用这个Flag。
break – 中止Rewirte,不在继续匹配
redirect – 返回临时重定向的HTTP状态302
permanent – 返回永久重定向的HTTP状态301

三、测试是否定向成功
SSH中输入指令:

/usr/local/nginx/sbin/nginx -t

提示:
the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
configuration file /usr/local/nginx/conf/nginx.conf test is successful

测试成功后,重启nginx,输入下面指令:

/usr/local/nginx/sbin/nginx -s reload

重启之后测试一下~是否成功设定完成! 输入指令~

下面另外说下Nginx设置目录如何重定向到目录的方法

例如下面这段设定nginx将某个目录下面的文件重定向到另一个目录,$2对应第二个括号(.*)中对应的字符串:

location /download/ {
rewrite ^(/download/.*)/m/(.*)\..*$ $1/nginx-rewrite/$2.gz break;
}

nginx重定向的IF条件判断
在server和location两种情况下可以使用nginx的IF条件判断,条件可以为以下几种:

1、匹配判断:
~ 为区分大小写匹配; !~为区分大小写不匹配
~* 为不区分大小写匹配;!~为不区分大小写不匹配

例如下面设定nginx在用户使用ie的使用重定向到/nginx-ie目录下:

if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /nginx-ie/$1 break;
}

2、文件和目录判断
-f和!-f判断是否存在文件
-d和!-d判断是否存在目录
-e和!-e判断是否存在文件或目录
-x和!-x判断文件是否可执行

例如下面设定nginx在文件和目录不存在的时候重定向:

if (!-e $request_filename) {
proxy_pass http://127.0.0.1;
}
return

最近更换了lnmp环境,发现用自带的ecshop.conf的伪静态规则是无效的,不知道是我的设置有问题呢,还是其他问题,通过搜索找到了一个可以用的

正确的可以使用的规则如下:

location / {
    if (!-e $request_filename) {
        rewrite "^/index\.html" /index.php last;
        rewrite "^/category$" /index.php last;
        rewrite "^/feed-c([0-9]+)\.xml$" /feed.php?cat=$1 last;
        rewrite "^/feed-b([0-9]+)\.xml$" /feed.php?brand=$1 last;
        rewrite "^/feed\.xml$" /feed.php last;
        rewrite "^/category-([0-9]+)-b([0-9]+)-min([0-9]+)-max([0-9]+)-attr([^-]*)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$" /category.php?id=$1&brand=$2&price_min=$3&price_max=$4&filter_attr=$5&page=$6&sort=$7&order=$8 last;
        rewrite "^/category-([0-9]+)-b([0-9]+)-min([0-9]+)-max([0-9]+)-attr([^-]*)(.*)\.html$" /category.php?id=$1&brand=$2&price_min=$3&price_max=$4&filter_attr=$5 last;
        rewrite "^/category-([0-9]+)-b([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$" /category.php?id=$1&brand=$2&page=$3&sort=$4&order=$5 last;
        rewrite "^/category-([0-9]+)-b([0-9]+)-([0-9]+)(.*)\.html$" /category.php?id=$1&brand=$2&page=$3 last;
        rewrite "^/category-([0-9]+)-b([0-9]+)(.*)\.html$" /category.php?id=$1&brand=$2 last;
        rewrite "^/category-([0-9]+)(.*)\.html$" /category.php?id=$1 last;
        rewrite "^/goods-([0-9]+)(.*)\.html" /goods.php?id=$1 last;
        rewrite "^/article_cat-([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$" /article_cat.php?id=$1&page=$2&sort=$3&order=$4 last;
        rewrite "^/article_cat-([0-9]+)-([0-9]+)(.*)\.html$" /article_cat.php?id=$1&page=$2 last;
        rewrite "^/article_cat-([0-9]+)(.*)\.html$" /article_cat.php?id=$1 last;
        rewrite "^/article-([0-9]+)(.*)\.html$" /article.php?id=$1 last;
        rewrite "^/brand-([0-9]+)-c([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)\.html" /brand.php?id=$1&cat=$2&page=$3&sort=$4&order=$5 last;
        rewrite "^/brand-([0-9]+)-c([0-9]+)-([0-9]+)(.*)\.html" /brand.php?id=$1&cat=$2&page=$3 last;
        rewrite "^/brand-([0-9]+)-c([0-9]+)(.*)\.html" /brand.php?id=$1&cat=$2 last;
        rewrite "^/brand-([0-9]+)(.*)\.html" /brand.php?id=$1 last;
        rewrite "^/tag-(.*)\.html" /search.php?keywords=$1 last;
        rewrite "^/snatch-([0-9]+)\.html$" /snatch.php?id=$1 last;
        rewrite "^/group_buy-([0-9]+)\.html$" /group_buy.php?act=view&id=$1 last;
        rewrite "^/auction-([0-9]+)\.html$" /auction.php?act=view&id=$1 last;
        rewrite "^/exchange-id([0-9]+)(.*)\.html$" /exchange.php?id=$1&act=view last;
        rewrite "^/exchange-([0-9]+)-min([0-9]+)-max([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$" /exchange.php?cat_id=$1&integral_min=$2&integral_max=$3&page=$4&sort=$5&order=$6 last;
        rewrite "^/exchange-([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$" /exchange.php?cat_id=$1&page=$2&sort=$3&order=$4 last;
        rewrite "^/exchange-([0-9]+)-([0-9]+)(.*)\.html$" /exchange.php?cat_id=$1&page=$2 last;
        rewrite "^/exchange-([0-9]+)(.*)\.html$" /exchange.php?cat_id=$1 last;
    }

    if (!-e $request_filename) {
        return 404;
    }
}

lnmp自带的规则如下(我使用无效):

if (!-e $request_filename)
{
rewrite "^/index\.html" /index.php last;
rewrite "^/category$" /index.php last;
rewrite "^/feed-c([0-9]+)\.xml$” /feed.php?cat=$1 last;
rewrite “^/feed-b([0-9]+)\.xml$” /feed.php?brand=$1 last;
rewrite “^/feed\.xml$” /feed.php last;
rewrite “^/category-([0-9]+)-b([0-9]+)-min([0-9]+)-max([0-9]+)-attr([^-]*)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$” /category.php?id=$1&brand=$2&price_min=$3&price_max=$4&filter_attr=$5&page=$6&sort=$7&order=$8 last;
rewrite “^/category-([0-9]+)-b([0-9]+)-min([0-9]+)-max([0-9]+)-attr([^-]*)(.*)\.html$” /category.php?id=$1&brand=$2&price_min=$3&price_max=$4&filter_attr=$5 last;
rewrite “^/category-([0-9]+)-b([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$” /category.php?id=$1&brand=$2&page=$3&sort=$4&order=$5 last;
rewrite “^/category-([0-9]+)-b([0-9]+)-([0-9]+)(.*)\.html$” /category.php?id=$1&brand=$2&page=$3 last;
rewrite “^/category-([0-9]+)-b([0-9]+)(.*)\.html$” /category.php?id=$1&brand=$2 last;
rewrite “^/category-([0-9]+)(.*)\.html$” /category.php?id=$1 last;
rewrite “^/goods-([0-9]+)(.*)\.html” /goods.php?id=$1 last;
rewrite “^/article_cat-([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$” /article_cat.php?id=$1&page=$2&sort=$3&order=$4 last;
rewrite “^/article_cat-([0-9]+)-([0-9]+)(.*)\.html$” /article_cat.php?id=$1&page=$2 last;
rewrite “^/article_cat-([0-9]+)(.*)\.html$” /article_cat.php?id=$1 last;
rewrite “^/article-([0-9]+)(.*)\.html$” /article.php?id=$1 last;
rewrite “^/brand-([0-9]+)-c([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)\.html” /brand.php?id=$1&cat=$2&page=$3&sort=$4&order=$5 last;
rewrite “^/brand-([0-9]+)-c([0-9]+)-([0-9]+)(.*)\.html” /brand.php?id=$1&cat=$2&page=$3 last;
rewrite “^/brand-([0-9]+)-c([0-9]+)(.*)\.html” /brand.php?id=$1&cat=$2 last;
rewrite “^/brand-([0-9]+)(.*)\.html” /brand.php?id=$1 last;
rewrite “^/tag-(.*)\.html” /search.php?keywords=$1 last;
rewrite “^/snatch-([0-9]+)\.html$” /snatch.php?id=$1 last;
rewrite “^/group_buy-([0-9]+)\.html$” /group_buy.php?act=view&id=$1 last;
rewrite “^/auction-([0-9]+)\.html$” /auction.php?act=view&id=$1 last;
rewrite “^/exchange-id([0-9]+)(.*)\.html$” /exchange.php?id=$1&act=view last;
rewrite “^/exchange-([0-9]+)-min([0-9]+)-max([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$” /exchange.php?cat_id=$1&integral_min=$2&integral_max=$3&page=$4&sort=$5&order=$6 last;
rewrite ^/exchange-([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*)\.html$” /exchange.php?cat_id=$1&page=$2&sort=$3&order=$4 last;
rewrite “^/exchange-([0-9]+)-([0-9]+)(.*)\.html$” /exchange.php?cat_id=$1&page=$2 last;
rewrite “^/exchange-([0-9]+)(.*)\.html$” /exchange.php?cat_id=$1 last;
}

一、什么是.htaccess文件

.htaccess文件是Apache服务器上的一个设置文件。它是一个文本文件,可以使用任何文本编辑器进行编写。.htaccess文件提供了针对目录改变配置的方法,即通过在一个特定的文档目录中放置一个包含一个或多个指令的文件(.htaccess文件),以作用于此目录及其所有子目录。.htaccess的功能包括设置网页密码、设置发生错误时出现的文件、改变首页的文件名(如index.html)、禁止读取文件名、重新导向文件、加上MIME类别、禁止列目录下的文件等。

在需要针对目录改变服务器的配置,而对服务器系统没有root权限时,应该使用.htaccess文件。如果服务器管理员不愿意频繁修改配置,则可以允许用户通过.htaccess文件自己修改配置,尤其是ISP在一台机器上提供多个用户站点,而又希望用户可以自己改变配置的情况下,一般会开放部分.htaccess的功能给使用者自行设置。
注意:.htaccess是一个完整的文件名,不是***.htaccess或其它格式(当然也有管理员把其设置成其它名字,但一般都是使用.htaccess)。另外,上传.htaccess文件时,必须使用ASCII模式,并使用chmod命令改变权限为:644(RW_R__R__)。每一个放置.htaccess的目录和其子目录都会被.htaccess影响。例如,在/abc/目录下放置了一个.htaccess文件,那么/abc/和 /abc/def/内所有的文件都会被它影响,但/index.html不会被它影响,这一点是很重要的。

二、使用.htaccess配置文件

在配置Apache时,除了可以在主配置文件(http.conf)中配置访问控制之外,还可以使用.htaccess 文件配置对指定目录的访问控制。使用.htaccess文件可以改变主配置文件中的配置,但是它只能设置对指定目录的访问控制,这个目录就是.htaccess文件存放的目录。在一个目录下设置了.htaccess文件之后,当用户使用浏览器访问此目录时,Apache会读取该文件的配置来覆盖主配置文件(http.conf)的配置。
注意:
1.修改.htaccess文件无需重新启动Apache服务器,而是立即生效。
2.在可能的情况下应该尽量避免使用.htaccess文件,因为使用.htaccess文件会降低服务器的运行性能。

何时使用.htaccess文件:
有如下两种情况需要使用.htaccess文件:
*在多个用户之间分割配置
*想在不重新启动服务器的情况下改变服务器配置
使用.htaccess文件必须经过两个配置步骤:
*首先在主配置文件中的启用并控制对.htaccess文件的使用
*然后在需要覆盖主配置文件的目录下生成.htaccess文件
在主配置文件中的启用并控制对.htaccess文件的使用
1.设置文件名称
必须保证在主配置文件中包含如下的配置语句:

AccessFileName .htaccess
<Files ~ “^.htaccess”>
Order allow,deny
Deny from all
</Files>

2.控制在.htaccess文件中可以使用的指令组
要控制在.htaccess文件中可以使用的指令组,需要在主配置文件中使用AllowOverride指令。下面列出了可以在AllowOverride指令所使用的指令组。
指令组 可用指令 说明
============================
AuthConfig
AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile, Require
进行认证、授权以及安全的相关指令
=============================
FileInfo
DefaultType, ErrorDocument, ForceType, LanguagePriority, SetHandler, SetInputFilter, SetOutputFilter
控制文件处理方式的相关指令
=============================
Indexes
AddDescription, AddIcon, AddIconByEncoding, AddIconByType, DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName, IndexIgnore, IndexOptions, ReadmeName
控制目录列表方式的相关指令
==============================
Limit
Allow,Deny,Order
进行目录访问控制的相关指令
==============================
Options
Options, XBitHack
启用不能在主配置文件中使用的各种选项
=============================
All
全部指令组
可以使用以上所有指令
=============================
None
禁止使用所有指令
禁止处理.htaccess文件
==============================
3、生成.htaccess文件
当在主配置文件中配置了对.htaccess文件的启用和控制之后,接下来就可以在需要覆盖主配置文件的目录下生成.htaccess文件。.htaccess文件中可以使用的配置指令取决于主配置文件中AllowOverride指令的设置。

4、使用.htaccess文件举例
下面举一个简单的例子说明.htaccess文件的使用。
首先在文档根目录下生成一个private目录,并创建测试文件

# cd /var/www/html
# mkdir private
# cd private
# touch test

修改配置前,在客户浏览器查看结果。
修改主配置文件

# vi /etc/httpd/conf/httpd.conf

添加如下配置语句

<Directory “/var/www/html/private”>
AllowOverride Options
</Directory>

重新启动httpd

# service httpd restart

在/var/www/html/private目录下生成.htaccess文件

# vi /var/www/html/private/.htaccess

添加如下配置语句

Options –Indexes

在客户浏览器中查看结果。

即对private目录的访问不生成文件列表

三、.htaccess文件的配置说明

Apache可以使用分布在整个网页结构中的特殊文件来进行配置,这些特殊文件通常叫.htaccess,也可以用AccessFileName指令来改变。.htaccess 文件中的指令的作用域是存放它的那个目录及其所有子目录。.htaccess 文件的语法与主配置文件相同。由于对每次请求都会读取.htaccess 文件,所以对这些文件的改变会立即生效。
可以查阅Context了解可以放在.htaccess文件中的指令;服务器管理员可以通过AllowOverride指令,来决定.htaccess 文件中可以生效的指令。
.htaccess 文件(或者”分布式配置文件”)提供了针对目录改变配置的方法,即在一个特定的文档目录中放置一个包含一个或多个指令的文件,以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。
子目录中的指令会覆盖更高级目录或者主服务器配置文件中的指令。
- .htaccess必须以ASCII模式上传,最好将其权限设置为644。

1、错误文档的定位
常用的客户端请求错误返回代码:
401 Authorization Required
403 Forbidden
404 Not Found
405 Method Not Allowed
408 Request Timed Out
411 Content Length Required
412 Precondition Failed
413 Request Entity Too Long
414 Request URI Too Long
415 Unsupported Media Type
常见的服务器错误返回代码:
500 Internal Server Error
用户可以利用.htaccess指定自己事先制作好的错误提醒页面。一般情况下,人们可以专门设立一个目录,例如errors放置这些页面。然后再.htaccess中,加入如下的指令:
ErrorDocument 404 /errors/notfound.html
ErrorDocument 500 /errors/internalerror.html
一条指令一行。上述第一条指令的意思是对于404,也就是没有找到所需要的文档的时候得显示页面为/errors目录下的notfound.html页面。不难看出语法格式为:
ErrorDocument 错误代码 /目录名/文件名.扩展名
如果所需要提示的信息很少的话,不必专门制作页面,直接在指令中使用HTML号了,例如下面这个例子:
ErrorDocument 401 “你没有权限访问该页面,请放弃!”

2、文档访问的密码保护
要利用.htaccess对某个目录下的文档设定访问用户和对应的密码,首先要做的是生成一个.htpasswd的文本文档,例如:
martin:123456
这里密码经过加密,用户可以自己找些工具将密码加密成.htaccess支持的编码。该文档最好不要放在www目录下,建议放在www根目录文档之外,这样更为安全些。
有了授权用户文档,可以在.htaccess中加入如下指令了:
AuthUserFile .htpasswd的服务器目录
AuthGroupFile /dev/null (需要授权访问的目录)
AuthName EnterPassword
AuthType Basic (授权类型)
require user wsabstract (允许访问的用户,如果希望表中所有用户都允许,可以使用 require valid-user)

3、拒绝来自某个IP的访问
如果我不想某个政府部门访问到我的站点的内容,那可以通过.htaccess中加入该部门的IP而将它们拒绝在外。

例如:
order allow,deny
deny from 210.10.56.32
deny from 219.5.45.
allow from all

第二行拒绝某个IP,第三行拒绝某个IP段,也就是219.5.45.0~219.2.45.255。想要拒绝所有人?用deny from all好了。不止用IP,也可以用域名来设定。

4、保护.htaccess文档
在使用.htaccess来设置目录的密码保护时,它包含了密码文件的路径。从安全考虑,有必要把.htaccess也保护起来,不让别人看到其中的内容。虽然可以用其他方式做到这点,比如文档的权限。不过,.htaccess本身也能做到,只需加入如下的指令:
order allow,deny
deny from all

5、URL转向
我们可能对网站进行重新规划,将文档进行了迁移,或者更改了目录。这时候,来自搜索引擎或者其他网站链接过来的访问就可能出错。这种情况下,可以通过如下指令来完成旧的URL自动转向到新的地址:
Redirect /旧目录/旧文档名 新文档的地址
或者整个目录的转向:
Redirect 旧目录 新目录

6、改变缺省的首页文件
一般情况下缺省的首页文件名有default、index等。不过,有些时候目录中没有缺省文件,而是某个特定的文件名,比如在pmwiki中是pmwiki.php。这种情况下,要用户记住文件名来访问很麻烦。在.htaccess中可以轻易的设置新的缺省文件名:
DirectoryIndex 新的缺省文件名
也可以列出多个,顺序表明它们之间的优先级别,例如:
DirectoryIndex filename.html index.cgi index.pl default.htm

7使用.htaccess 访止盗链。如果你网站上的一个图片被别的N多的网站引用了,那么,这很有可能会导致你服务器的性能下降,使用下面的代码可以保护某些热门的链接不被过多的引用。

Options +FollowSymlinks
# Protect Hotlinking
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?domainname.com/ [nc]
RewriteRule .*.(gif|jpg|png)$ http://domainname.com/img/hotlink_f_o.png [nc]

8、设置网站的时区
SetEnv TZ America/Houston

9、阻止IP列表
有些时候,你需要以IP地址的方式阻止一些访问。无论是对于一个IP地址还是一个网段,这都是一件非常简单的事情,如下所示:
allow from all
deny from 145.186.14.122
deny from 124.15

Apache对于被拒绝的IP会返回403错误。

10、 把一些老的链接转到新的链接上——搜索引擎优化SEO
Redirect 301 /d/file.html http://www.htaccesselite.com/r/file.html

11、为服务器管理员设置电子邮件
ServerSignature EMail
SetEnv SERVER_ADMIN default@domain.com

12、阻止 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

13、把某些特殊的IP地址的请求重定向到别的站点

ErrorDocument 403 http://www.piaoyun.cc
Order deny,allow
Deny from all
Allow from ip
Allow from ip

14、直接找开文件而不是下载 – 通常,我们打开网上文件的时候总是会出现一个对话框问我们是下载还是直接打开,使用下面的设置就不会出现这个问题了,直接打开。

AddType application/octet-stream .pdf
AddType application/octet-stream .zip
AddType application/octet-stream .mov

15、修改文件类型 – 下面的示例可以让任何的文件都成为PHP那么被服务器解释。比如:myphp, cgi,phtml等。

ForceType application/x-httpd-php
SetHandler application/x-httpd-php

16、阻止存取.htaccess 文件

# secure htaccess file
order allow,deny
deny from all
#下面的代码保护.htaccess不被下载
<Files ~ “^.htaccess”>
Order allow,deny
Deny from all
</Files>

17、保护服务器上的文件被存取

# prevent access of a certain file order allow,deny
deny from all

18、阻止目录浏览

# disable directory browsing
Options All -Indexes

19、口令认证 – 你可以创建一个文件用于认证。下面是一个示例:

# to protect a file
AuthType Basic
AuthName “Prompt”
AuthUserFile /home/path/.htpasswd
Require valid-user
# password-protect a directory
residesAuthType basic
AuthName “This directory is protected”
AuthUserFile /home/path/.htpasswd
AuthGroupFile /dev/null
Require valid-user

详细见官方:httpd://apache.org/docs/1.3/howto/htaccess.html

在看完PHPCMS V9静态化HTML生成设置及URL规则优化之后,发现有不少朋友在搜索寻找Phpcms V9在Apache、Nginx、IIS伪静态规则,于是搜集分享在此!

PHPCMS V9 伪静态规则 for Apache:

RewriteEngine on
RewriteBase / //如果安装在子目录需要制定RewriteBase
RewriteRule ^content_([0-9]+)_([0-9]+)_([0-9]+).html index.php?m=content&c=index&a=show&catid=$1&id=$2&page=$3
RewriteRule ^announce_([0-9]+).html index.php?m=announce&c=index&a=show&aid=$1
RewriteRule ^link.html index.php?m=link
RewriteRule ^link_type_([0-9,a-z]*).html index.php?m=link&c=index&a=list_type&type_id=$1&siteid=$2
RewriteRule ^rss.html index.php?m=content&c=rss&siteid=$1
RewriteRule ^tag_([0-9,a-z]*)_(.*).html index.php?m=content&c=tag&catid=$1&tag=$2
RewriteRule ^special.html index.php?m=special&c=index&a=special&siteid=$1
RewriteRule ^special_([0-9,a-z]*).html index.php?m=special&c=index&id=$1
RewriteRule ^special_([0-9,a-z]*)_([0-9,a-z]*).html index.php?m=special&c=index&a=type&specialid=$1&typeid=$2

PHPCMS V9在Rewrite伪静态Nginx规则【2014年6月14日更新规则】:

location / {
if (!-f $request_filename){
rewrite (.*) /index.php;
}
rewrite ^/caipu-([0-9]+)-([0-9]+)-([0-9]+).html /index.php?m=content&c=index&a=show&catid=$1&id=$2&page=$3 last;
rewrite ^/content-([0-9]+)-([0-9]+)-([0-9]+).html /index.php?m=content&c=index&a=show&catid=$1&id=$2&page=$3 last;
rewrite ^/list-([0-9]+)-([0-9]+).html /index.php?m=content&c=index&a=lists&catid=$1&page=$2 last;
rewrite ^/tags/([^\.]*)-([0-9]+).html /index.php?m=content&c=tag&a=lists&tag=$1&page=$3 last;
rewrite ^/comment-([0-9]+)-([0-9]+)-([0-9]+).html /index.php?m=comment&c=index&a=init&commentid=content_$1-$2-$3 last;
rewrite ^/([^\.]*).html /index.php?m=member&c=index&a=$1 last;
}
<strong>相关热词搜索:</strong>{loop $keywords $keyword}<a href="{APP_PATH}tags/{urlencode($keyword)}-1.html" target="_blank" class="blue">{$keyword}</a>{/loop}

PHPCMS V9伪静态规则 win下IIS完美设置:

新建一个记事本文件,将文件名改为:httpd.ini。再将以下代码粘贴进去:

[ISAPI_Rewrite]

# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
RewriteEngine on
RewriteRule ^(.*)content-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/index\.php\?m=content&c=index&a=show&catid=$2&id=$3&page=$4
RewriteRule ^(.*)show-([0-9]+)-([0-9]+)-([0-9]+).html$ $1/index\.php\?m=content&c=index&a=show&catid=$2&id=$3&page=$4
RewriteRule ^(.*)list-([0-9]+)-([0-9]+).html$ $1/index\.php\?m=content&c=index&a=lists&catid=$2&page=$3

PHPCMS V9分类信息列表页在IIS6 伪静态规则:

RewriteRule /list-(d+)-(.*)-(.*)-(.*)-(.*)-(.*)-(.*)-(.*)-(.*)-(.*).html /index.php?m=content&c=index&a=lists&catid=$1&city=$2&agent=$3&bedroom=$4&objecttype=$5&pay_type_int=$6&price=$7&rent_mode=$8&zone=$9&page=$10

近期由于系统需要配置301跳转,研究实施之余便整理了此篇文档,希望对需要的朋友有用。
配置步骤如下:
一、开启.htaccess文件
在apache的conf文件中,打开httpd.conf

1、把文档中所有的AllowOverride None全部的都给换成AllowOverride All
2、去掉下面的注释
LoadModule rewrite_module modules/mod_rewrite.so

二、htaccess 写法
1、Apache中的.htaccess是放在工程的根目录(www)中,而且在文件的权限还有一定的要求,所以像在linux和unix中的的时候,要设置相关权限,一般把.htaccess必需以ASCII模式上传,最好将其权限设置为644。
.htaccess文件内容如下:
多域名301跳转跳转到统一域名下的:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^PiaoYun1.CC [NC,OR]
RewriteCond %{HTTP_HOST} ^www.PiaoYun1.CC [NC,OR]
RewriteCond %{HTTP_HOST} ^PiaoYun2.CC [NC,OR]
RewriteCond %{HTTP_HOST} ^www.PiaoYun2.CC [NC,OR]
RewriteCond %{HTTP_HOST} ^PiaoYun3.CC [NC,OR]
RewriteCond %{HTTP_HOST} ^www.PiaoYun3.CC [NC,OR]
RewriteCond %{HTTP_HOST} ^PiaoYun.CC [NC]
RewriteRule ^(.*)$ http://www.PiaoYun.CC/$1 [L,R=301]
这些地址就会都以301重定向的方式跳转到 [L,R=301]
这些地址就会都以301重定向的方式跳转到http://www.PiaoYun.CC
以这样的方式重定向,GOOGLE会自动传递PR值到http://www.PiaoYun.CC这个地址上,避免了同一网站多个域名分散权重的情况,这也是我们对网站SEO需要注意的问题。

某一栏目301跳转:
RewriteCond %{REQUEST_URI} ^/kangle/
RewriteRule ^kangle/(.*) http://kangle.puercn.com/$1 [R=permanent,L]

RewriteCond %{REQUEST_URI} ^/puerchanews/open/ [NC]
RewriteRule ^/puerchanews/open/(.*) http://www.puercn.com/puerchanews/open/$1 [R=301,L]

1)将不带WWW的域名转向到带WWW的域名下:
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^PiaoYun.CC[NC]
RewriteRule ^(.*)$ http://www.PiaoYun.CC/$1 [L,R=301]
非WWW的域名转向到带WWW的域名
RewriteCond %{HTTP_HOST} !^www.PiaoYun.CC [NC]

2)重定向到新域名:
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^(.*)$ http://www.PiaoYun.CC/$1 [L,R=301]

3)使用正则进行301重定向,实现伪静态:
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^news-(.+)\.html$ news.php?id=$1
将news.php?id=456这样的地址转向到news-456.html

4)二级域名指向指目录 如将cn.PiaoYun.CC指向 /zh_cn子目录
RewriteCond %{HTTP_HOST} ^cn.PiaoYun.CC [NC]
RewriteRule ^(.*) /zh_cn

Apache下vhosts.conf中配置301重定向
为实现URL规范化,SEO通常将不带WWW的域名转向到带WWW域名,vhosts.conf中配置为:

<VirtualHost *:80>
ServerName Www.PiaoYun.CC
DocumentRoot /home/PiaoYun.CC
</VirtualHost>
<VirtualHost *:80>
ServerName PiaoYun.CC
RedirectMatch permanent ^/(.*) http://Www.PiaoYun.CC/$1
</VirtualHost>

2、错误文档的定位
2.1常用的客户端请求错误返回代码:
401 Authorization Required
403 Forbidden
404 Not Found
405 Method Not Allowed
408 Request Timed Out
411 Content Length Required
412 Precondition Failed
413 Request Entity Too Long
414 Request URI Too Long
415 Unsupported Media Type
500 Internal Server Error

2.2利用.htaccess指定事先制作好的错误提醒页面。一般下,人们专门设立目录,例如errors放置页面。然后再.htaccess中,需要编写如下的指令:
ErrorDocument 404 /errors/notfound.html (命令[ErrorDocument],错误数,对应的界面)
ErrorDocument 500 /errors/internalerror.html
注意:一条指令一行。上述第一条指令的意思是对于404,也找到所的文档的得显示页面为/errors目录下的notfound.html页面。不难看出语法格局为:
ErrorDocument 错误代码 /目录名/名.扩展名

3、文档访问的密码保护
要利用.htaccess对某个目录下的文档设定访问和对应的密码,首先要做的是生成.htpasswd的文本文档,例如:
zheng:y4E7Ep8e7EYV
这里密码经由加密,找些工具将密码加密成.htaccess的编码。该文档最好不要放在工程的根目录下,建议放在工程根目录文档之外,这样更为安全些。
有了授权文档,在.htaccess中加入如下指令了:
AuthUserFile .htpasswd的器目录
AuthGroupFile /dev/null (授权访问的目录)
AuthName EnterPassword
AuthType Basic (授权类型)
require user wsabstract (允许访问的,但愿表中都允许,require valid-user)
注,括号部门为学习添加的注释

4、拒绝来自某个IP的访问
我不想某个IP访问到站点的,那.htaccess中加入该IP而将它们拒绝在外。
例如:
order allow,deny
deny from 210.10.56.32
deny from 219.5.45.
allow from all
第一行开启如许和拒绝的功能,第二行拒绝某个IP,第三行拒绝某个IP段,也219.5.45.0~219.2.45.255
想要拒绝人?用deny from all好了。不止用IP,也用域名来设定。

5、保护.htaccess文档
在.htaccess来设置目录的密码保护时,它包含了密码的路径。从安全考虑,有必要把.htaccess也保护起来,不让别人看到其中的。虽然用其他做到这点,好比文档的权限。不外,.htaccess本身也能做到,只需加入如下的指令:

order allow,deny
deny from all

#下面的代码保护.htaccess不被下载
<Files ~ “^.htaccess”>
Order allow,deny
Deny from all
</Files>

6、URL转向

6.1:可能对重新规划,将文档了迁移,或者更改了目录。这,来自搜索引擎或者其他链接过来的访问就可能犯错。这种下,如下指令来完成旧的URL自动转向到新的:
Redirect /旧目录/旧文档名 新文档的
或者整个目录的转向:
Redirect 旧目录新目录
6.2:改变缺省的首页
一般下缺省的首页名有default、index等。不外,有些目录中没出缺省,而是某个特定的名,好比在pmwiki中是 pmwiki.php。这种下,要记住名来访问很麻烦。在.htaccess中等闲的设置新的缺省名:
DirectoryIndex 新的缺省名
也列出多个,顺序表明它们之间的优先级别,例如:
DirectoryIndex filename.html index.cgi index.pl default.htm

6.3:防止盗链(界面跳转或301,302跳转)
不喜欢别人在的网页上连接的、文档的话,也htaccess的指令来做到。
所的指令如下:
RewriteEngine on
RewriteCond %{ HTTP_REFERER } !^$
RewriteCond %{ HTTP_REFERER } !^http://(www.)?PiaoYun.CC/.*$ [NC]
RewriteRule .(gif&line;jpg)$ http://Www.PiaoYun.CC/替代名 [R,L]
此处的配置是正则表达式的形式来实现了!

".htaccess"文件往往被网页设计师们忽略。假如你还不知道什么是htaccess的话,你可以去查一下wikipedia。它是目录级别的配置文件,有常用的网页服务器支持这种配置,例如Apache。下面我将列出10条有用的.htaccess配置技巧。

1、反盗链
那些盗用了你的内容,还不愿意自己存储图片的网站是无耻的。你可以通过以下配置来放置别人盗用你的图片:
RewriteBase /
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?piaoyun.cc/.*$ [NC]
RewriteRule .(gif|jpg|swf|flv|png)$ /feed/ [R=302,L]

 

2、防止目录浏览
有时候目录浏览是有用的,但大部分情况会有安全问题。为了让你的网站更安全,你可以通过htaccess文件来禁用这个功能:
Options All -Indexes

 

3、SEO友好的301永久重定向
这一招是我常用的。每次我更改网站URL结构的时候,我都会做301重定向:
Redirect 301 http://www.piaoyun.cc/article.html http://www.piaoyun.cc/archives/article

 

4、显示个性化的 404 错误页面
当用户访问了一个不存在的页面的时候,网页服务器会显示"404 file not found"错误。有很多CMS可以让你设置自定义的错误页面,但最简单的方法是更改htaccess:
ErrorDocument 404 /404.html

 

5、设置目录的默认页面
假如你需要为不同的目录设置不同的默认页面,你可以很容易的通过 .htaccess 实现:
DirectoryIndex about.html

 

6、基于referer来限制网站访问
站长通常不会限制网站访问,但是当你发现有一些网站尽给你带来垃圾流量的话,你就应该屏蔽他们:
<IfModule mod_rewrite.c>
RewriteEngine on  RewriteCond %{HTTP_REFERER} piaoyun.cc [NC,OR]
RewriteCond %{HTTP_REFERER} piaoyun.cc [NC,OR]
RewriteRule .* – [F]
</ifModule>

 

7、限制PHP上传文件大小
这招在共享空间的服务器上很有用,可以让我的用户上传更大的文件。第一个是设置最大的上传文件大小,第二个是设置最大的POST请求大小,第三个PHP脚本最长的执行时间,最后一个是脚本解析上传文件的最长时间
php_value upload_max_filesize 20M
php_value post_max_size 20M
php_value max_execution_time 200
php_value max_input_time 200

 

8、压缩文件
你可以通过压缩文件来减少网络流量,也页面装载时间:
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript

 

9、缓存文件
这一点还需要解释吗?
<FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf)$">
HeadersetCache-Control "max-age=2592000″
</FilesMatch>

 

10、添加尾部的反斜杠
我并不确定,但是很多文章,很多人都说添加尾部反斜杠有益于SEO:
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_URI} /+[^\.]+$
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]
</IfModule>

利用.htaccess文件做301重定向.

1.重定向PiaoYun.CC到Www.PiaoYun.CC
这种重定向旨在使域名唯一,是网站SEO必须要做的,后面重定向Www.PiaoYun.CC到PiaoYun.CC也是出于同样的原因,只是形式不同。
打开.htaccess文件,加入以下规则。(下面的规则是针对主域名的,子域名要修改)

RewriteEngine On
rewritecond %{http_host} ^PiaoYun.CC [NC]
rewriterule ^(.*)$ http://Www.PiaoYun.CC/$1 [R=301,NC,L]

2.重定向Www.PiaoYun.CC到PiaoYun.CC
RewriteEngine On
rewritecond %{http_host} ^Www.PiaoYun.CC [NC]
rewriterule ^(.*)$ http://PiaoYun.CC/$1 [R=301,NC,L]

3.重定向oldPiaoYun.CC到Www.PiaoYun.CC
RewriteEngine On
rewritecond %{http_host} ^oldPiaoYun.CC [NC]
rewriterule ^(.*)$ http://Www.PiaoYun.CC/$1 [R=301,NC,L]

4.重定向oldPiaoYun.CC to PiaoYun.CC
RewriteEngine On
RewriteBase /
rewritecond %{http_host} ^PiaoYun.CC [NC]
rewriterule ^(.*)$ http://PiaoYun.CC/$1 [R=301,NC,L]

5.重定向PiaoYun.CC/file/file.php 到 otherPiaoYun.CC/otherfile/other.php
RewriteEngine On
RewriteCond %{HTTP_HOST} ^PiaoYun.CC$
RewriteRule ^file/file.php$ http://Www.otherPiaoYun.CC/otherfile/other.php [R=301,L]

最后一个代码,是 设置了默认首页排序跟301转向的. (不带www的域名转向到带www的域名.)
<Files ~ "^.(htaccess|htpasswd)$">
deny from all
</Files>
DirectoryIndex index.html index.htm index.php
order deny,allow

RewriteEngine On
RewriteCond %{HTTP_HOST} !^Www.PiaoYun.CC$ [NC]
RewriteRule ^(.*)$ http://Www.PiaoYun.CC/$1 [L,R=301]

需要注意的是:
php的301跳转可能导致 子目录绑定的域名也被301跳转.  强烈建议301的.htaccess写上后测试下子目录绑定的域名是否被跳转.
godaddy后台中可以用 site redirect做不带www域名的301跳转.