0
我們剛從辦公室切換到Apache到nginx。
阿帕奇重寫規則看起來像下面這樣:
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)/$ /main.php?A=$1&B=$2&C=$3&D=$4&E=$5 [L]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)/$ /main.php?A=$1&B=$2&C=$3&D=$4 [L]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/$ /main.php?A=$1&B=$2&C=$3 [L]
RewriteRule ^([^/]*)/([^/]*)/$ /main.php?A=$1&B=$2 [L]
RewriteRule ^([^/]*)/$ /main.php?A=$1 [L]
新Nginx的規則如下:
rewrite ^([^/]*)/([^/]*)/([^/]*)/([^/]*)/([^/]*)/$ /main.php?A=$1&B=$2&C=$3&D=$4&E=$5 last;
rewrite ^([^/]*)/([^/]*)/([^/]*)/([^/]*)/$ /main.php??A=$1&B=$2&C=$3&D=$4 last;
rewrite ^([^/]*)/([^/]*)/([^/]*)/$ /main.php?A=$1&B=$2&C=$3 last;
rewrite ^([^/]*)/([^/]*)/$ /main.php?A=$1&B=$2 last;
rewrite ^([^/]*)/$ /main.php?A=$1 last;
這裏的問題,假設我們在訪問domain.com/frog/檸檬/
<?php
/* Using Apache */
print_r($_GET);
Array([A] => 'frog' [B] => 'lemon')
/* Using Nginx */
print_r($_GET);
Array([A] => [B] => [C] => 'lemon')
?>
什麼導致額外的數組參數?
紅利:我確定有一個更聰明的方法來編碼我上面的內容,你會如何寫你的重寫?
我試着用加號代替第一個星號(每個規則)'以及所有的星號。無效全部產生了404。但是,您上面的最後一個示例,使用額外的斜槓,完美地工作 - 第一個查詢字符串param爲「A」並正確填充$ _GET超級全局。謝謝! – user2977468
@ user2977468對不起,我剛剛編輯了答案,我錯過了將/放在前面,否則他們將無法捕捉路徑/ aaa/bbb / – FrancescoMM