Mod-Rewrite

MOD_REWRITE 用於重寫 GET 請求

  • February 19, 2014

我需要一個 .htaccess 表達式來使用第二個 get 變數或按名稱獲取 get 變數。目前我的 mod_rewrite 更改 URL 以刪除 index.php 文件名並更改 pageName GET 變數,使其看起來像一個文件名。

我現在需要第二個 GET 變數,但目前它的方式是,在第一次重寫後它甚至無法辨識 get 變數,所以我希望 mod_rewrite 處理第二個 var,它將是 ‘blogpage=1’(1 將是您目前所在的部落格頁面),使其看起來像這樣:

*********.co.uk/PageName/2

而不是這個

*********.co.uk/PageName?blogpage=2

由於這目前不起作用,PHP 腳本只是認為 var 不存在並返回 NULL 值。

這是我目前的 mod_rewrite 條件:

RewriteCond %{REQUEST_fileNAME} !-d
RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule ^([^/\.]+)/?$ index.php?pageName=$1

如果重寫規則指定一個新的,Apache 將替換整個查詢字元串。要追加,請使用QSA 標誌,如mod_rewrite 文件中所述:

修改查詢字元串

預設情況下,查詢字元串會原封不動地傳遞。但是,您可以在包含查詢字元串部分的替換字元串中創建 URL。只需在替換字元串中使用問號來指示應將以下文本重新註入到查詢字元串中。當您想刪除現有的查詢字元串時,只用問號結束替換字元串。要組合新舊查詢字元串,請使用

$$ QSA $$旗幟。

因此,如果您將程式碼更改為

RewriteCond %{REQUEST_fileNAME} !-d
RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule ^([^/\.]+)/?$ index.php?pageName=$1 [QSA]

它也應該轉發舊的查詢字元串。


要進行第二次重寫,只需將另一個規則添加到另一個擷取組。

RewriteCond %{REQUEST_fileNAME} !-d
RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule ^([^/\.]+)/([0-9]+)$ index.php?pageName=$1&blogpage=$2 [QSA,L]

RewriteCond %{REQUEST_fileNAME} !-d
RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule ^([^/\.]+)/?$        index.php?pageName=$1 [QSA]

引用自:https://serverfault.com/questions/576577