Nginx

將 htaccess url 重寫規則轉換為 nginx

  • August 6, 2017

我如何在這裡轉換我的 htaccess 規則

RewriteRule ^/?([^/]+)/([^/]+)/?$ page-1.php?a=$1&b=$2 [L,QSA]
RewriteRule ^/?([^/]+)/([^/]+)/([^/]+)/?$ page-2.php?a=$1&b=$2&c=$3 [L,QSA]

進入nginx規則?我試過使用轉換器,但我得到了以下

winginx
location / { 
rewrite ^/?([^/]+)/([^/]+)/?$ /page-1.php?a=$1&b=$2 break; 
rewrite ^/?([^/]+)/([^/]+)/([^/]+)/?$ /page-2.php?a=$1&b=$2&c=$3 break;
}


anilcetin
rewrite ^/?([^/]+)/([^/]+)/?$ /page-1.php?a=$1&b=$2 last;
rewrite ^/?([^/]+)/([^/]+)/([^/]+)/?$ /page-2.php?a=$1&b=$2&c=$3 last;

但是它們都沒有真正起作用,這裡有什麼問題?

在我的程式碼中,這裡有一個頁面

domain.com?page-1.php?a=a&b=b會變成domain.com/a/b

domain.com?page-2.php?a=a&b=b&c=c進入domain.com/a/b/c

問題

您的評論說您對正則表達式和重寫語句感到滿意,並且只需要 Nginx 和位置塊周圍部分的幫助。

快速瀏覽它們並不能讓我確信你的重寫是正確的。我希望有更多類似的東西 - 注意這肯定是不正確的,絕對不是最佳的,甚至可能無法通過“nginx -t”檢查。

rewrite ^/([0-9a-zA-Z_\-\s\+]+)?a=([0-9a-zA-Z_\-\s\+]+)&b=([0-9a-zA-Z_\-\s\+]+)*c=([0-9a-zA-Z_\-\s\+]+)  /$2/$3/$4;

這裡的總體構想是為您關心的 URL 的每個部分創建一個擷取組,並在前面加上一個未使用的擷取組。第一個只是因為我不擅長正則表達式,而且從我自己的一個可能有效的配置中複製和粘貼一些東西更容易。

Nginx 位置和正則表達式

Nginx 重寫可以在伺服器或位置上下文中,並按照配置文件中的順序工作。對你來說,我可能會把它們放在站點配置文件的頂部附近,在位置塊上方

server {
 server_name example.com;
 listen 80;

 rewrite ^/?([^/]+)/([^/]+)/?$ /page-1.php?a=$1&b=$2 break; 
 rewrite ^/?([^/]+)/([^/]+)/([^/]+)/?$ /page-2.php?a=$1&b=$2&c=$3 break;

 location / { 
   # Whatever you want in here to handle the rewritten or normally requested URLs
   # root /var/www/html;
   # proxy_pass 1.2.3.4;
 }

 location /a {
   # If you want to handle specific URLs you can do it in another location block
 }
}

對您的問題的總體評論是它不是很精確,並且不能證明您已經為自己解決問題做出了任何努力。

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