所以基本上我正在嘗試撰寫以下規則:
假設我有這個網站:www.example.com
HTTP -> 重定向到 -> HTTPS
www -> 重定向到 -> 非 www
https://example.com/xyz-> 重寫為 ->https//example.com/post.php?id=xyz
所有這些規則應該同時起作用。我嘗試了以下示例:
RewriteRule ^(.*)$RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\.(?:css|js|jpe?g|gif|png)$ [NC]
RewriteRule ^(.*)$ post.php?id=$1 [L]
非常感謝你的幫助。
uj5u.com熱心網友回復:
RewriteRule ^(.*)$RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !\.(?:css|js|jpe?g|gif|png)$ [NC] RewriteRule ^(.*)$ post.php?id=$1 [L]
您的第一行看起來像一個錯字(?),因為它沒有意義。
您的第二條規則(重寫)非常正確,以便將請求重寫為post.php?id=<url>. 但是,嚴格來說,考慮到第二個條件實際上只是為了提高效率,這兩個條件的順序是錯誤的。檔案系統檢查相對昂貴,因此在訴諸檔案系統檢查之前,您應該排除對靜態資源的請求(使用正則運算式字串比較) 。
因此,在此重寫之前,您只需添加 HTTP 到 HTTPS和www 到非 www 重定向,這可以實作為一兩個規則。
請嘗試以下操作:
RewriteEngine On
# HTTP to HTTPS and www to non-www generic redirect
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(. ?)\.?$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]
# Rewrite requests to "post.php"
RewriteCond %{REQUEST_URI} !\.(?:css|js|jpe?g|gif|png)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) post.php?id=$1 [L]
注意:首先使用 302(臨時)重定向進行測驗,以避免潛在的快取問題。
%1在第一條規則中是對最后匹配的CondPattern的反向參考。IE。這包含域名,減去www.子域(如果有)。
關于 HTTP 到 HTTPS 重定向,這確實假設 SSL 證書直接安裝在您的應用程式服務器上,并且您沒有使用管理 SSL 證書的前端代理。
如果您不希望 URL 包含.php擴展名,那么您還應該考慮將其添加到RewriteCond指令中宣告的擴展名串列中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/424271.html
