0

nginx仮想ホストファイルに次のディレクティブがあります。

try_files $uri $uri/ /profile.php?nickname=$uri&$args;

それは問題なく動作しますが、ユーザーが適切なプロファイルアドレスを持つように、0-9a-z-文字のみを書き直したいと思います。次に例を示します。

http://www/mydomain.com/john

しかし、nginxはすべてを書き直します。たとえば、住所を入力すると、次のようになります。

http://www.mydomain.com/non-existing-holder/nonexisting-filename.html

404エラーを返す代わりに、すべてを書き換えます。

0-9-az-文字だけを書き直す方法はありますか?

server {
    listen 80;
    server_name www.mydomain.com;
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
    root /var/www/mydomain;
    error_page 404 /4044.html;
    location / {
        index index.html index.htm index.php;
        try_files $uri $uri/ /profile.php?nickname=$uri&$args;
        rewrite ^/forum/([0-9-]+)/([0-9a-z-]+).html$ /forum.php?tid=$1&title=$2 last;
    }

    location ~ \.php$ {
        try_files  $uri =404;
        include /etc/nginx/fastcgi_params;
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}
4

1 に答える 1

0

次の構成を試すことができます。

  • / testUSERをリクエストすると、404が返されます
  • /forum/100/something.htmlのリクエストは、/ forum.php?tid = 100&title=somethingに移動します。
  • / nicknameのリクエストは、/ profile.php?nickname=nicknameに移動します

location / {
    index index.html index.htm index.php;
    rewrite ^/([0-9a-z-]+)/?$ /profile.php?nickname=$1&$args last;
    try_files $uri $uri/ =404;
}
location /forum {
    rewrite ^/forum/([0-9-]+)/([0-9a-z-]+).html$ /forum.php?tid=$1&title=$2 last;
    alias /var/www/mydomain/forum;
}
于 2012-09-23T12:39:06.840 に答える