Nginx301和apache重定向域名規則方法(多個域名,單個域名)

技術小牛人發表於2017-11-12

例項:將所有topsem.com  topsem.cn的域名都跳轉到www.topsem.com這個域名,避免泛解析,有利於SEO

server

{

listen 80;

server_name *.topsem.com *.topsem.cn

index index.html index.php;

root /xxxxx/webroot;

if ($host != `www.topsem.com` ) {

rewrite ^/(.*)$ http://www.topsem.com/$1 permanent;

}

}

 apache 重定向

<VirtualHost *:80>

DocumentRoot /wwwroot/

ErrorLog “logs/vhost-error_log”

CustomLog “logs/vhost-access_log” common

RewriteEngine On

RewriteCond %{HTTP_HOST} !^www.teamtop.com$ [NC]

RewriteRule ^(.*) http://www.teamtop.com/ [L,R=301]

</VirtualHost>

註釋擴充:

last – 基本上都用這個Flag。

break – 中止Rewirte,不在繼續匹配

redirect – 返回臨時重定向的HTTP狀態302

permanent – 返回永久重定向的HTTP狀態301

 

nginx rewrite 偽靜態配置引數說明(含有例項)

正規表示式匹配,其中:

* ~ 為區分大小寫匹配

* ~* 為不區分大小寫匹配

* !~和!~*分別為區分大小寫不匹配及不區分大小寫不匹配

檔案及目錄匹配,其中:

* -f和!-f用來判斷是否存在檔案

* -d和!-d用來判斷是否存在目錄

* -e和!-e用來判斷是否存在檔案或目錄

* -x和!-x用來判斷檔案是否可執行

flag標記有:

* last 相當於Apache裡的[L]標記,表示完成rewrite

* break 終止匹配, 不再匹配後面的規則

* redirect 返回302臨時重定向 位址列會顯示跳轉後的地址

* permanent 返回301永久重定向 位址列會顯示跳轉後的地址

一些可用的全域性變數有,可以用做條件判斷(待補全)

$args

$content_length

$content_type

$document_root

$document_uri

$host

$http_user_agent

$http_cookie

$limit_rate

$request_body_file

$request_method

$remote_addr

$remote_port

$remote_user

$request_filename

$request_uri

$query_string

$scheme

$server_protocol

$server_addr

$server_name

$server_port

$uri

結合QeePHP的例子

if (!-d $request_filename) {

rewrite ^/([a-z-A-Z]+)/([a-z-A-Z]+)/?(.*)$ /index.php?namespace=user&controller=$1&action=$2&$3 last;

rewrite ^/([a-z-A-Z]+)/?$ /index.php?namespace=user&controller=$1 last;

break;

多目錄轉成引數

abc.domian.com/sort/2 => abc.domian.com/index.php?act=sort&name=abc&id=2

if ($host ~* (.*).domain.com) {

set $sub_name $1;

rewrite ^/sort/(d+)/?$ /index.php?act=sort&cid=$sub_name&id=$1 last;

}

目錄對換

/123456/xxxx -> /xxxx?id=123456

rewrite ^/(d+)/(.+)/ /$2?id=$1 last;

例如下面設定nginx在使用者使用ie的使用重定向到/nginx-ie目錄下:

if ($http_user_agent ~ MSIE) {

rewrite ^(.*)$ /nginx-ie/$1 break;

}

目錄自動加“/”

if (-d $request_filename){

rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;

}

禁止htaccess

location ~/.ht {

deny all;

}

禁止多個目錄

location ~ ^/(cron|templates)/ {

deny all;

break;

}

禁止以/data開頭的檔案

可以禁止/data/下多級目錄下.log.txt等請求;

location ~ ^/data {

deny all;

}

禁止單個目錄

不能禁止.log.txt能請求

location /searchword/cron/ {

deny all;

}

禁止單個檔案

location ~ /data/sql/data.sql {

deny all;

}

給favicon.ico和robots.txt設定過期時間;

這裡為favicon.ico為99 天,robots.txt為7天並不記錄404錯誤日誌

location ~(favicon.ico) {

log_not_found off;

expires 99d;

break;

}

location ~(robots.txt) {

log_not_found off;

expires 7d;

break;

}

設定某個檔案的過期時間;這裡為600秒,並不記錄訪問日誌

location ^~ /html/scripts/loadhead_1.js {

access_log off;

root /opt/lampp/htdocs/web;

expires 600;

break;

}

檔案反盜鏈並設定過期時間

這裡的return 412 為自定義的http狀態碼,預設為403,方便找出正確的盜鏈的請求

“rewrite ^/ http://leech.c1gstudio.com/leech.gif;”顯示一張防盜鏈圖片

“access_log off;”不記錄訪問日誌,減輕壓力

“expires 3d”所有檔案3天的瀏覽器快取

location ~* ^.+.(jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {

valid_referers none blocked *.c1gstudio.com *.c1gstudio.net localhost 208.97.167.194;

if ($invalid_referer) {

rewrite ^/ http://leech.c1gstudio.com/leech.gif;

return 412;

break;

}

access_log off;

root /opt/lampp/htdocs/web;

expires 3d;

break;

}

本文轉自    geekwolf   51CTO部落格,原文連結:http://blog.51cto.com/linuxgeek/999015


相關文章