北肙

当你不能够再拥有,唯一可以做的,就是令自己不要忘记。

Debian Linux 7.0 Apache2配置301转发及目录权限

闲来无事,注册了三个域名(kitaluft.com, 0x97.com, jourman.com),可个人博客只有一个,于是在刚开始的时候,都是随意地把三个域名都指向该空间,也没有做任何设置,所以访问某些目录的时候,文件列表都是可见的。后来只指定一个网址“blog.kitaluft.com”,其它都通过apache2转发到该网址,这种办法倒是极简单的,只需在配置文件中加"Redirect / http://blog.kitaluft.com"就可以。 但这样的话,明显存在一个问题,假如说我有篇文章被百度收录,且地址为“http://www.kitaluft.com/id=8?”,做了以上转发后,点击该链接,是不会转到该文章的。而301跳转,就能解决以上问题。 借用网友“http://www.admin5.com/article/20140717/552719.shtml”一句话,301跳转有两种实现方法: 1.当a.com跳转到b.com 打开a.com/1.html也跳转到b.com 2.当a.com跳转到b.com 打开a.com/1.html跳转到b.com/1.html 很明显,第二种方法比较有优势。本文讲述如何访问“www.kitaluft.com”跳转到“blog.kitaluft.com”。过程中需修改配置文件为之前为该博客写的虚拟主机配置。原文本内容为: <VirtualHost *:80>     ServerAdmin [email protected]     ServerName www.kitaluft.com     Redirect /  #显性转发      ErrorLog ${APACHE_LOG_DIR}/error.log           LogLevel warn          CustomLog ${APACHE_LOG_DIR}/access.log combined  </VirtualHost> 修改为: <VirtualHost *:80>         ServerAdmin [email protected]         ServerName www.kitaluft.com         RewriteEngine On         RewriteCond %{HTTP_HOST} ^www.kitaluft.com         RewriteRule ^(.*)$ http://beyan.me/$1 [R=permanent,L]         ErrorLog ${APACHE_LOG_DIR}/error.log               LogLevel warn          CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> 开启apache2重写模块 Bash # cd /etc/apache2/mods-enabled # ln -s ../mods-available/rewrite.load ./ 设置目录权限 <Directory /var/www/>     Options FollowSymLinks MultiViews  # 原来有Indexes,访问某目录时会索引该目录下文件,即列出该目录下所有文件     AllowOverride None     DirectoryIndex login.php index.php     Order allow,deny  # 先允许再禁止,类似于黑名单,全部允许,个别禁止     allow from all     Deny from 183.60.243.234  # 禁止某一IP访问网站,该ip一天内攻击37次,建议站长都列为黑名单 </Directory> 设置文件权限 <Files test.html>     Order allow,deny  # 拒绝该网站任何目录下该文件的访问     Deny from all </Files> 设置网络空间权限 […]

闲来无事,注册了三个域名(kitaluft.com, 0x97.com, jourman.com),可个人博客只有一个,于是在刚开始的时候,都是随意地把三个域名都指向该空间,也没有做任何设置,所以访问某些目录的时候,文件列表都是可见的。后来只指定一个网址“blog.kitaluft.com”,其它都通过apache2转发到该网址,这种办法倒是极简单的,只需在配置文件中加"Redirect / http://blog.kitaluft.com"就可以。 但这样的话,明显存在一个问题,假如说我有篇文章被百度收录,且地址为“http://www.kitaluft.com/id=8?”,做了以上转发后,点击该链接,是不会转到该文章的。而301跳转,就能解决以上问题。
借用网友“http://www.admin5.com/article/20140717/552719.shtml”一句话,301跳转有两种实现方法:
1.当a.com跳转到b.com 打开a.com/1.html也跳转到b.com
2.当a.com跳转到b.com 打开a.com/1.html跳转到b.com/1.html
很明显,第二种方法比较有优势。本文讲述如何访问“www.kitaluft.com”跳转到“blog.kitaluft.com”。过程中需修改配置文件为之前为该博客写的虚拟主机配置。原文本内容为:

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName www.kitaluft.com
    Redirect /  #显性转发 
    ErrorLog ${APACHE_LOG_DIR}/error.log      
    LogLevel warn     
    CustomLog ${APACHE_LOG_DIR}/access.log combined 
</VirtualHost>

修改为:

<VirtualHost *:80>    
    ServerAdmin [email protected]    
    ServerName www.kitaluft.com    
    RewriteEngine On    
    RewriteCond %{HTTP_HOST} ^www.kitaluft.com    
    RewriteRule ^(.*)$ http://beyan.me/$1 [R=permanent,L]    
    ErrorLog ${APACHE_LOG_DIR}/error.log          
    LogLevel warn         
CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>

开启apache2重写模块

Bash
# cd /etc/apache2/mods-enabled
# ln -s ../mods-available/rewrite.load ./

设置目录权限

<Directory /var/www/>
    Options FollowSymLinks MultiViews  # 原来有Indexes,访问某目录时会索引该目录下文件,即列出该目录下所有文件
    AllowOverride None
    DirectoryIndex login.php index.php
    Order allow,deny  # 先允许再禁止,类似于黑名单,全部允许,个别禁止
    allow from all
    Deny from 183.60.243.234  # 禁止某一IP访问网站,该ip一天内攻击37次,建议站长都列为黑名单
</Directory>

设置文件权限

<Files test.html>
    Order allow,deny  # 拒绝该网站任何目录下该文件的访问
    Deny from all
</Files>

设置网络空间权限

<Location /test>
    Order Allow,Deny
    Deny from all
</Location>

将拒绝任何以/test开头的URL的访问如:
http://www.kitaluft.com/test
http://www.kitaluft.com/test/abc.html
http://www.kitaluft.com/test/test/abc.html
关于目录权限,参考自:http://www.php100.com/html/webkaifa/apache/2009/0418/1193.html
后记:
笔者做了301重定向,生效后的网址有两个斜杠,例如:“http://beyan.me//”虽说不影响实际功能,便肯定是哪出了问题,大量百度谷歌之后,得出如下经验。
1、下列行中,^(.*)$和其它正则表达式所表达的一样,意思是除换行符之外的包括空行或者任意字符的行。
2、如果取掉第二个参数中的“http:// ”,浏览器地址栏中会出现死循环。
3、删掉$前面的“/”,就可以防止出现两个“//”的错误,大概是因为“$1”这个变量本身就以“/”开头。
4、“[R=permanent,L]”变量中不能有空格,否则apache2服务会报错。
5、“[NC]”表示忽略大小写。

RewriteCond %{HTTP_HOST} ^ [NC] 
RewriteRule ^(.*)$ http://beyan.me/$1 [R=permanent,L]

Leave a Reply

Your email address will not be published. Required fields are marked *