簡體   English   中英

.htaccess mod_rewrite 在組為空時跳過捕獲組

[英].htaccess mod_rewrite skips capture group when group is empty

我正在使用 .htaccess 重寫具有兩個分組的 URL。

我的 .htaccess:

RewriteRule ^tips/([0-9]*)/?([0-9]*)?/?(.+)?$ /tips.php?item=$1&id=$2 [L,QSA]

當 URL 中有兩個數字時,它可以正常工作,但是當一個為空時,它會完全跳過捕獲組。

example.com/tips/1/2/abc -> /tips.php?item=1&id=2 (EXPECTED)

example.com/tips//2/abc  -> /tips.php?item=2&id=  (UNEXPECTED)
                            /tips.php?item=&id=2  (WHAT WAS EXPECTED)

我已經把它放到了一些 regex/htaccess 測試器中,但他們似乎都說它應該像我預期的那樣工作。

(這當然是一個不尋常的 URL,但我想將它傳遞給 PHP,以便我可以處理 PHP 中的錯誤。

您可以將此重寫規則與THE_REQUEST變量一起使用:

Options -MultiViews
RewriteEngine On

RewriteCond %{THE_REQUEST} \s/+tips/(\d*)/(\d*)/ [NC]
RewriteRule ^ tips.php?item=%1&id=%2 [L,QSA]

mod_rewrite引擎在RewriteRule模式中將多個//轉換為單個/因此我們需要在此處使用THE_REQUEST來匹配在 Apache 中收到的原始請求。

使用您顯示的示例,您能否嘗試以下操作。

Options -MultiViews
RewriteEngine ON
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^tips/(\d+)/(\d+)/?$ tips.php?item=$1&id=$2 [L,QSA]

這將查找不存在的文件/目錄並將它們重寫為帶有參數的 php 文件,例如@anubhava 先生提到的多個/斜杠將通過重寫規則轉換為單個/所以這應該適用於您提到的兩種情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM