今、私はこの設定を持っています:
location ~ ^/phpmyadmin/(.*)$
{
alias /home/phpmyadmin/$1;
}
ただし、www.mysite.com/phpmyadmin
(スラッシュがないことに注意して)アクセスすると、404を探しているものが見つかりません。末尾のスラッシュが含まれていないためだと思います。どうすれば修正できますか?
今、私はこの設定を持っています:
location ~ ^/phpmyadmin/(.*)$
{
alias /home/phpmyadmin/$1;
}
ただし、www.mysite.com/phpmyadmin
(スラッシュがないことに注意して)アクセスすると、404を探しているものが見つかりません。末尾のスラッシュが含まれていないためだと思います。どうすれば修正できますか?
回答:
使用している正規表現に含まれている可能性があります-
location ~ ^/phpmyadmin/(.*)$
上記は/ phpmyadmin /、/ phpmyadmin / anything / else / hereに一致しますが、正規表現には末尾のスラッシュが含まれるため、/ phpmyadminには一致しません。
おそらく次のようなものが必要です:
location ~ /phpmyadmin/?(.*)$ {
alias /home/phpmyadmin/$1;
}
疑問符は正規表現の量指定子であり、nginxに前の文字(スラッシュ)の0または1つに一致するように指示する必要があります。
警告:コミュニティは、このソリューションを現状のセキュリティリスクと考えています
より良い解決策:
location ~ ^/phpmyadmin(?:/(.*))?$ {
alias /home/phpmyadmin/$1;
}
サーバーに/home/phpmyadmin
最初のアクセス許可があることを確認してください。
受け入れられた答えとの違いの説明:
それはすべて正規表現についてです。
まず、^
charは、文字列の先頭ではなく、途中のどこからでも一致させたいことを意味します。$
文字列の末尾にマッチする最後の手段で。
これ(?:)
は、非キャプチャグループを意味します。キャプチャ結果には含まれませんが、いくつかの文字を単純にグループ化します。/
charは親パスの重要な部分ではなく、子パスの重要でない部分にしたいので、このようにグループ化します。
なぜあなたはただ使用しないのですか
location /phpmyadmin {
alias /home/phpmyadmin;
}
?
alias
ディレクティブの末尾のスラッシュなしで試してみましたか?
/phpmyadminblahblahblahblah
か、他の組み合わせ
これは古い質問ですが、Google経由でここにたどり着く人にとっては、次の方法で解決しました(@kbecのバリエーション、かなり良かったです):
location ~ ^/foo(/.*)?$ {
proxy_pass http://$backend$1$is_args$args
}
これにより/foo
、さまざまなバリエーションがキャプチャされ/bar
、別のURL(パラメーターを含む)にリダイレクトされます。私はproxy_pass
ディレクティブでそれを示していますが、それも動作しalias
ます。
/foo
-> /bar
/foo/
-> /bar/
/foo/sub
-> /bar/sub
/foo/sub1/sub2/?param=value
-> /bar/sub1/sub2/?param=value
$1
オプションでサブリソースと先頭のスラッシュをキャプチャするため、動作し/fooextra/
ます。また、現在または最後のスラッシュを適切にリダイレクトします。
このリダイレクトは、末尾のスラッシュの有無にかかわらずURL のみを書き換えます。スラッシュの後に来るものはすべて上書きされません。
domain.com/location => domain.com/new/locationにリダイレクトされるdomain.com/location
=> domain.com/new/locationにリダイレクトされるdomain.com/location/other =>リダイレクトされ
ない
server {
# 301 URL Redirect
rewrite ^/location/?$ /new/location permanent;
}
私はそのようにしました
rewrite ^/promo/?$ http://example.com/promo/page43902.html;
location /promo/ {
root /var/www;
}