44927


現在、nginxでApacheのUserDirと同じ動きをするWEBサーバを構築しているのですが、  
ユーザディレクトリのドキュメントルート指定について教えて頂きたいことがあります。

`https://hogehoge.com/`にアクセスした場合は、`/var/www/html`配下の物を、`https://hogehoge.com/~fugafuga`にアクセスした場合は、`/home/fugafuga/public_html`配下の物をそれぞれ表示するようにするため、下記のようなコンフィグを書きました。

[code]

    server {
    
    ～
    
    root /var/www/html;
    
        #UserDir 
            location ~ ^/~(?<userdir_user>.+?)(?<userdir_uri>/.*)?$ {
                    index   index.html index.htm index.php;
                    alias /home/$userdir_user/public_html$userdir_uri;
                    autoindex on;
    
            #try_files $uri $uri/ /index.php?$args;
                    limit_req zone=limit_req_by_ip burst=10 nodelay;
    
                    location ~ \.php$ {
                            include         fastcgi_params;
                            fastcgi_param   SCRIPT_FILENAME     $request_filename;
                            fastcgi_index index.php;
                            fastcgi_pass    unix:/var/run/php-fpm.sock;
                            fastcgi_split_path_info ^(.+?\.php)(/.*)$;
                            include fastcgi_params;
                            fastcgi_buffers 256 128k;
                            fastcgi_buffer_size 128k;
                            fastcgi_intercept_errors on;
                            fastcgi_read_timeout 120s;
                    }
            }
    
        #Index
            location / {
                            try_files $uri $uri/ /index.php?$args;
                            limit_req zone=limit_req_by_ip burst=10 nodelay;
    
                            location ~ \.php$ {
                                    fastcgi_split_path_info ^(.+?\.php)(/.*)$;
                                    fastcgi_pass unix:/var/run/php-fpm.sock;
                                    fastcgi_index index.php;
                                    #fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                                    fastcgi_param   SCRIPT_FILENAME     $request_filename;
                                    include fastcgi_params;
                                    fastcgi_buffers 256 128k;
                                    fastcgi_buffer_size 128k;
                                    fastcgi_intercept_errors on;
                                    fastcgi_read_timeout 120s;
                            }
                    }
    
    ～
    
    }
    
[/code]

このコンフィグであれば、意図した動きをしてくれると思っていたのですが、テストを行った際に1点問題が発生しました。

`https://hogehoge.com/~fugafuga/index.html`にて

[code]

    <script src="/js/xxx.js>
    
[/code]

のようにスクリプトのパスを指定すると、`https://hogehoge.com/~fugafuga/js/xxx.js`ではなく、`https://hogehoge.com/js/xxx.js`を読み込もうとします。

これは、rootでドキュメントルートを`/var/www/html`として指定し、ユーザディレクトリはあくまでaliasを張っているだけですので、コンフィグ通りに動いてくれてはいるのですが、これを期待通りの`https://hogehoge.com/~fugafuga/js/xxx.js`を読み込もうとするような仕組みを作るには、どのように変更してあげれば良いでしょうか・・・？

色々と確認したのですが、私が観測できる限りではうまい解決策が見つかりませんでした。

大変恐縮ですが、お知恵を拝借したく存じます。


CC BY-SA 4.0
2018-06-20T13:25:18.020
44925
2018-06-20T13:45:30.280
2018-06-20T13:36:44.963
3060
29013
question
nginx
nginxでユーザディレクトリを実装した際のドキュメントルートの変更について


単純にHTML中で指定したファイルパスの記述ミスが原因かと思われます。

`https://hogehoge.com/~fugafuga/index.html`から  
`https://hogehoge.com/~fugafuga/js/xxx.js`を参照するなら、正しい記述は

[code]

    <script src="./js/xxx.js">
    
[/code]

となるはずです。絶対パスと **相対パス** の違いに気をつけてください。

`./`で始めると「同じディレクトリ以下にあるファイルやフォルダを参照する」相対パスで、`/`で始めてしまうと絶対パスになります。


CC BY-SA 4.0
2018-06-20T13:45:30.280
44927
2018-06-20T13:45:30.280
3060
44925
answer