ルールを書き換えるためにNGINXを使用していますが、何をしても機能しません。
現在のリンク:
/tutorials/index.php?article=2
私が望む方法
/tutorials/2
私 - 現在 - NGINX書き換え設定/規則:
location / {
try_files $uri $uri/ =404 /index.php?$args;
rewrite ^/tutorials/([0-9]+)$ /tutorials/index.php?article=$1 last;
}
私がここで何を間違っているのか?
私のNGINX設定ファイル:
server {
# Hide php extension: ".php"
if (!-e $request_filename) {
rewrite ^(.*)$ /$1.php;
}
# Redirect to HTTPS
if ($scheme = http) { return 301 https://$host$request_uri; }
# Access rule(s)
location / {
try_files $uri $uri/ =404 /index.php?$args;
}
location ~ ^/tutorials/([[:digit:]]+)$ {
rewrite ^ /tutorials/index.php?article=$1 last;
}
# Enable: PHP FPM
location ~ \.php$ {
if ($request_uri ~ /tutorials/index\.php) {
return 302 $scheme://$host/tutorials/$arg_article;
}
# Allow user execution of PHP
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.0-alpha.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
client_max_body_size 5M;
}
}
答え1
NGINXには外部リダイレクトと内部リダイレクトという概念があります。
デフォルトでは、リダイレクトループを作成したいように聞こえますが、内部要求が外部から受信されるかどうかによって区別して、そのループを中断します。
あなたの外部URLの仕様は次のとおりです/tutorials/([[:digit:]]+)
。
内部URLの仕様は次のとおりです/tutorials/index.php?article=$1
。
もしそうなら、私は次のことを望むかもしれません。
location ~ ^/tutorials/([[:digit:]]+)$ {
rewrite ^ /tutorials/index.php?article=$1 last;
}
location ~ \.php$ {
if ($request_uri ~ /tutorials/index\.php) {
return 302 $scheme://$host/tutorials/$arg_article;
}
fastcgi_…
}