2024-03-08 11:23:04
在Apache中有兩種方法配置,一是通過httpd.conf文件,二是通過.htaccess文件。
使用 httpd.conf 來配置 rewrite 策略。
要使用 httpd.conf 文件來設置偽靜態策略,我們可以直接在 httpd.conf 中寫入如下代碼,如果您的網站是配置在 VirtualHost 中,則將這段代碼加到對應的。
使用.htaccess來配置rewrite策略。
檢查httpd.conf中的:
RewriteEngine onRewriteRule ^(.*)list-([0-9]+)-([0-9]+)\.html$ $1list.php?page=$2&id=$3
複製代碼保存後重啟httpd服務即可生效。
常見問題: Q:為何都按上面設置了缺還是無法靜態化? A:很有可能是因為別的目錄設置項覆蓋了。
Nginx:
Nginx下設置偽靜態方法與Apache差不多,直接在nginx.conf (或者在對應的*.conf) 中找到需設置偽靜態規則的服務器對應字段,在server{ location/{ } }中添加以下代碼:
server {listen 80 default_server;server_name _;location / {root /usr/share/nginx/html;index index.html index.htm;rewrite ^(.*)list-([0-9]+)-([0-9]+)\.html$ $1list.php?page=$2&id=$3;}}
添加後重啟Nginx服務即可生效!
正則表達式匹配
就用上面的例子中的偽靜態策略來簡單解釋下正則表達式在配置的作用:
策略:RewriteRule ^(.*)list-([0-9]+)-([0-9]+)\.html$ $1list.php?page=$2&id=$3
請求路徑:http://www.abc.com/list-123-456.html
本策略分成兩段,第一段是使用正則表達式去匹配請求訪問的路徑,第二段是將匹配後的參數轉化為真實訪問的路徑。策略執行時:^(.*)list-([0-9]+)-([0-9]+)\.html$ 與 /list-123-456.html這個字符串進行匹配:
^和$字符分別代表了匹配輸入字符串的開始和結束
()中的匹配到的內容會被按順序分配到變量$1 $2 $3中
.*匹配任意字符串,且長度從0個到多個,故$1值為/
[0-9]+匹配字符0-9,長度1個到多個,故$2和$3分別是123和456
所以最後真實訪問的動態地址為/list.php?page=123&id=456
上面只是介紹了基本的配置策略,其實這個rewrite規則還有非常多的玩法,例如使用RewriteCond進行域名層面的重寫跳轉。