.htaccess 完全手册

1.时区设置

有些时候,当你在PHP里使用date或mktime函数时,由于时区的不同,它会显示出一些很奇怪的信息。下面是解决这个问题的方法之一。就是设置你的服务器的时区。你可以在这里找到所有支持的时区的清单。

[code]SetEnv TZ Australia/Melbourne[/code]

2. 搜索引擎友好的301永久转向方法

为什么这是搜索引擎友好的呢?因为现在很多现代的搜索引擎都有能根据检查301永久转向来更新它现有的记录的功能。
继续阅读“.htaccess 完全手册”

Ubuntu下启动Apache对.htaccess 的支持

步骤:

1. 终端运行

sudo a2enmod

程序提示可供激活的模块名称,输入:

rewrite

2. 修改/etc/apache2/sites-enabled/000-default (该链接指向的是站点配置文件)
把(默认的www目录、或者需要应用.htaccess的目录)下的AllowOverride 属性改为All,保存。
3. 重新加载apache

sudo /etc/init.d/apache2 restart

收工。

使用.htaccess自动在url末尾添加斜杠“/”

  一般而言,url在末尾处是不是加上斜杠“/”,对用户访问是没有太大影响的,大多数的Web 服务器均能正确解析:当Web服务器接收到对某个末尾不含斜杠的url请求时,如“http://www.yaoyingying.org/about”,其首先假定在网站根目录下存在一个名为“about”的文件,至于具体的文件格式则取决于web服务器的具体设置,根据设置不同可以是html或其他任何格式如 php,如果当在相应目录下找不到该文件,主流的Web服务器如apache或IIS便自动将其作为目录处理,在上述例子中即在根目录下查找名为 “about”的目录,如果存在这个目录,则向客户端浏览器返回这个目录的默认文档;而对以斜框“/”结尾的url,web服务器则直接将其按目录处理。

  这一过程由Web服务器自动处理,用户基本上感觉不到——当然,也不排除在极端情况下web服务器不能正确解析而返回“Page Not Found” 404 错误——正因为此,许多网站在建设中往往忽略网址中的斜杠问题,在撰写url时比较随意,部分url在末尾处加了斜杠而另外部分则未加斜框,等等。应该说,这是个很不好的习惯。

  另一方面,即使网站建设者在自己的网站内能够规范地撰写url,即对除针对文件外的网址均在url末尾处加上斜杠,但同样也存在一个问题:别的网站创建的链接未必在末尾处包含斜杠,这同样会带来问题。

  因此,理想的解决办法便是让web服务器能够自动为末尾没有斜杠的url添加“/”。

url末尾处加上斜杠“/”能够有效的避免Duplicate Content

  从SEO(搜索引擎优化)的角度,网站内出现过多的重复内容(Duplicate Content)是一大忌。简单地说,所谓重复内容(Duplicate Content),是指同样的内容、页面可通过多个不同的url访问,这往往会给搜索引擎收录、排名网页时带来困扰。

  很多朋友在进行SEO时一般比较关注域名中含“www”与不含“www”的问题,即类似于 “http://www.yaoyingying.com”、“http://yaoyingying.com”造成的重复内容问题,却容易忽略url末尾的斜框可能带来的重复内容。事实上,这也是极易带来重复内容的主要因素,比如说,虽然在浏览器中,“http://yaoyingying.com/about/”与 “http://yaoyingying.com/about”虽然都链接至我们的“关于”页,但对搜索引擎而言,这是两个完全不同的的网址,这样的两个网址指向同一个页面情况正是标准的Duplicate Content。
在url末尾处加上斜杠“/”能够提高web服务器的效率

  从本文开头所介绍的web服务器解析url的机制可以很明显地看出,当url指向目录而末尾没有斜杠“/”时,web服务器需首先进行一个查找有无同名文件的过程,这无疑会加重Web Server的压力,而以斜框结尾的url则可省略这一过程。

  当然,web服务器的性能取决于很多因素,仅仅这样做,即在url末尾添加斜杠,对服务器性能的提升影响很小。但如果您的网站访问量相当大,积少成多,带来的好处也是很可观的。
在Apache中自动将末尾没有斜杠的url以301重定向至正确地址

  要避免网站在搜索引擎中出现重复内容,最简单的解决办法便是将不同的url以301重定向至一个标准的url上,这样,才能最大限度地挖掘链接的价值,特别是来之不易的外部网站链接。

  Apache由于支持mod_rewrite功能,在.htaccess中进行简单设置即可实现这一点,即将没有以斜框“/”结尾的url永久重定向至以“/”结尾的网址。——至于IIS,要实现类似功能,似乎并没有太简单的方式。

  下面即为实现这一功能的.htaccess代码:

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

  说明:

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

htaccess 的一点用法

LAMP 环境里可以很容易的通过 .HTACCESS 进行一些网站的设置
网站引索:

DirectoryIndex index.php index.htm index.html

域名重定向,将yaoyingying.com 重定向到 www.yaoyingying.com

RewriteEngine On
RewriteCond %{HTTP_HOST} ^yaoyingying\.com$ [NC]
RewriteRule ^(.*)$ http://www.yaoyingying.com/$1 [R=301,L]

下面这些对静态页网站的 URL 优化就有很大帮组了,取好每个页面文件的名字,通过 下面的规则进行目录结构式优化。

RewriteRule ^([a-z]+)\/([a-z0-9]+)-([a-z0-9]+)\/$            $1_$2-$3.php   [QSA,L]
RewriteRule ^([a-z]+)\/([a-z]+)-([a-z]+)\/$            $1_$2-$3.php   [QSA,L]
RewriteRule ^([a-z]+)\/([a-z]+)-([a-z]+)-([a-z]+)\/$            $1_$2-$3-$4.php   [QSA,L]
RewriteRule ^([a-z]+)-([a-z]+)\/([a-z]+)\/$            $1-$2_$3.php   [QSA,L]
RewriteRule ^([a-z]+)-([a-z]+)\/([a-z]+)-([a-z]+)\/$   $1-$2_$3-$4.php   [QSA,L]
RewriteRule ^([a-z]+)-([a-z]+)\/([a-z]+)-([a-z]+)-([a-z]+)\/$   $1-$2_$3-$4-$5.php   [QSA,L]

RewriteRule ^([a-z]+)\/([a-z0-9]+)\/$            $1_$2.php  [QSA,L]
RewriteRule ^(.*)\/$                            $1.php   [QSA,L]

Apache 通过 .htaccess 对目录加密


例如有/home/www/website/dir1 目录,需要对/dir1/加密访问,必须输入口令密码才能访问。

在这种情况下,要是/dir1/加密可以通过 .htaccess 和 .htpasswd 的设置来实现

在/home/www/website/dir1下建立.htaccess文件
vi /home/test1/a/.htaccess
文件内容如下
AuthName “===LOGIN===”   #随便填写
AuthType Basic
AuthUserFile /home/www/website/dir1/.htpasswd
Require valid-user username
保存退出

账号生成口令
htpasswd -c /home/test1/a/.htpasswd username 系统会要求输入两遍该用户的密码。

修改密码也是同样 htpasswd -c /home/test1/a/.htpasswd username