Apache url 重寫

重寫配置

1、打開 apache 裏httpd.conf(通常是在/etc/httpd/conf目錄裏)

2、找到   #LoadModule rewrite_module modules/mod_rewrite.so  去掉前面的  #

    如果在 httpd 中查看是否調用  rewrite_module  通過   httpd -M   的參數來查看; 如果發現有  rewrite_module (shared)  ,說明已經被調用了。

 於大多數發行版來說,Apache 2的模塊一般是位於如下的兩個位置  /usr/lib/apache2/modules  或   /usr/lib/httpd/modules 

 

3、找到 AllowOverride None 改成 AllowOverride All , 有兩個全部改掉
     AllowOverride 的參數設置爲ALL,表示整臺服務器上都支持URL規則重寫。Apache 服務器要讀每個網站下目錄下的 .htaccess 文件。如果沒有這個文件,或者這個文檔沒有定義任何關於URL重寫的規則就不會有任何效果。設置   DocumentRoot  的   Directory (整臺服務器): 

<Directory "DocumentRoot所設置的路徑">
# 比如我們把DocumentRoot的路徑改爲了 /,那我們也要把Directory做針對性的行爲設置也要改成這個路徑。
<Directory />
Options FollowSymLinks
#AllowOverride None 
AllowOverride ALL
Order allow,deny
Allow from all
</Directory>

4、設置單個站點 ,httpd-vhosts.conf / vhosts.conf  文件

<VirtualHost *:80>
DocumentRoot "F:\phpStud\PHPTutorial\WWW\tp\public"
ServerName tp.com
ServerAlias gohosts.com
<Directory "F:\phpStud\PHPTutorial\WWW\tp\public">
Options FollowSymLinks ExecCGI
AllowOverride All   # 如果此站點不開啓url 重寫 AllowOverride  Noll,默認與全局設置一致
Order allow,deny
Allow from all
Require all granted
</Directory>
</VirtualHost>

 

5、重啓apache

 

重寫規則

網站根目錄下創建  .htaccess  文件

1) R[=code](force redirect)  #強制外部重定向
強制在替代字符串加上http://thishost[:thisport]/前綴重定向到外部的URL.如果code不指定,將用缺省的302 HTTP狀態碼。
2) F(force URL to be forbidden)  #禁用URL,返回403HTTP狀態碼。
3) G(force URL to be gone)  # 強制URL爲GONE,返回410HTTP狀態碼。
4) P(force proxy) # 強制使用代理轉發。
5) L(last rule) # 表明當前規則是最後一條規則,停止分析以後規則的重寫。
6) N(next round) # 重新從第一條規則開始運行重寫過程。
7) C(chained with next rule) # 與下一條規則關聯
如果規則匹配則正常處理,該標誌無效,如果不匹配,那麼下面所有關聯的規則都跳過。
8) T=MIME-type(force MIME type) # 強制MIME類型
9) NS (used only if no internal sub-request) # 只用於不是內部子請求
10) NC(no case) # 不區分大小寫
11) QSA(query string append) # 追加請求字符串
12) NE(no URI escaping of output) # 不在輸出轉義特殊字符
例如:RewriteRule /foo/(.*) /bar?arg=P1%3d$1 [R,NE] # 將能正確的將/foo/zoo轉換成/bar?arg=P1=zoo
13) PT(pass through to next handler) # 傳遞給下一個處理
例如:
RewriteRule ^/abc(.*) /def$1 [PT] # 將會交給/def規則處理
Alias /def /ghi
14) S=num(skip next rule(s)) # 跳過num條規則
15) E=VAR:VAL(set environment variable) # 設置環境變量

 

HTTP 跳轉至 HTTPS 示例

RewriteEngine on  # 開啓重寫
RewriteCond %{SERVER_PORT} !^443$  # 如果訪問的不是 443 端口
RewriteCond %{REQUEST_URI} !^/tz.php  #如果訪問的url 不是 /tz.php
RewriteRule (.*) https://%{SERVER_NAME}/$1 [R]     # 跳轉到  https://域名+$1

 

HTTP 80 強制轉 HTTPS

RewriteEngine On
RewriteCond %{SERVER_PORT} 80  # 如果訪問的是80 端口
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R,L]  # 跳轉 https 

 

強制301重定向 HTTPS

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /  # 表示項目根目錄
RewriteCond %{SERVER_PORT} !^443$  # 如果訪問的不是443 端口
RewriteRule (.*) https://%{SERVER_NAME}/$1 [R=301,L]  # 重定向到 301
</IfModule>

 

訪問不是一個文件也不是一個目錄跳轉指定頁面

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f # 如果請求的不是文件
RewriteCond %{REQUEST_FILENAME} !-d # 如果請求的不是目錄
RewriteRule ^(.*)$ http://other.kevin.com/$1 [R]  #跳轉到指定頁面

 

圖片防盜鏈

RewriteCond   %{HTTP_REFERER}   !^$ # 如果上個頁面地址爲空
RewriteCond    %{HTTP_REFERER}   !^http://(www\.)?example\.com/   [NC]    #或者不是來自你自己的域名
RewriteRule   \.(gif|jpg|png)$   - [F]  #禁止訪問

 

如果文件不存在重定向到404頁面

RewriteCond   %{REQUEST_FILENAME}   !-f  # 如果訪問的不是一個文件
RewriteCond   %{REQUEST_FILENAME}   !-d  #如果訪問的不是一個目錄
RewriteRule   .?   /404.php   [L]   #跳轉到網站根目錄
# 也可攜帶參數
#RewriteRule ^/?(.*)$ /404.php?url=$1 [L]

 

重命名目錄

RewriteRule   ^/?old_directory/([a-z\.]+)$   new_directory/$1   [R=301,L]

相關文章  :https://www.cnblogs.com/kynewu/p/9088550.html

https://cloud.tencent.com/developer/article/1348412

 

apache 服務器 忽略大小寫

1、查看系統有無mod_speling.so模塊,路徑:/etc/httpd/modules,如果沒有就從別處下載一個;

2、加載此模塊   vi /etc/httpd/conf/httpd.conf ,添加如下行,如果已經存在取消 ; 註釋:  

 LoadModule speling_module modules/mod_speling.so
<IfModule mod_speling.c>
  CheckSpelling On
  CheckCaseOnly On
</IfModule>

3、重啓httpd服務。

 

nginx  url 重寫與 apache url 重寫的轉換

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章