重寫配置
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服務。