web-dev-qa-db-ja.com

書き換えルール:URLへのパスを追加する

更新

これまでのすべての返信に感謝します。私の例ではuser(例:user1)の後の数字は重要ではありません。ユーザーには任意の英数字の名前を付けることができます。 ==


ディレクトリが指定されている場合は、その末尾に「/faces/main.jsf」を追加するようにします。

例えば

URLを次のようにします。

example.com/user1/faces/main.jsf

システムは次のようなものを追加できます(これは許可する必要があります)

 http://example.com/user1/faces/main.jsf;jsessionid=Z_DV-bY6MuQGlIvflPwgdKDk60cNzOkWXbC5G18ILrjR0jKoGWnd!-617980607

リクエストが次のいずれかのように見える場合:

example.com/user1
example.com/user1/

「/faces/main.jsf」を追加してほしいのですが。書き換えルールの何が問題になっていますか?

<VirtualHost *:80>
    ServerName          example.com
    ProxyPass           /       http://1.example.com:8888/
    ProxyPassReverse    /       http://1.example.com:8888/
    RewriteEngine       On
    # RewriteLog          /tmp/rewrite.log

    RewriteCond %{HTTP_Host} !^example.com$
    RewriteRule !^/(.) http://example.com/$1 [L,R]

    RewriteCond %{REQUEST_URI}  !^/(.+/)faces/main.jsf.*
    RewriteRule !^(.+)/faces/main.jsf.*$  $1/faces/main.jsf [L,R]
</VirtualHost>
2
Felipe Alvarez

プロキシ構成で使用している他のホストにすべてのリクエストをプロキシすることを想定しています。したがって、次のように、両方のタスクを1つのディレクティブセットに組み合わせる必要があります。

<VirtualHost *:80>
    ServerName          example.com
    RewriteEngine       On

    RewriteCond %{REQUEST_URI}  !^/(.+/)faces/main.jsf
    RewriteRule ^(.+?)(;.*) http://1.example.com:8888/$1/faces/main.jsf$2 [P]
    ProxyPassReverse / http://1.example.com:8888/
</VirtualHost>

「/ userX」などの特定のURLのみを書き換えたい場合は、上記の正規表現を簡単に適合させることができます。

1
ofrommel

これを試して

<VirtualHost *:80>
    ServerName          example.com
    ProxyPass           /       http://1.example.com:8888/
    ProxyPassReverse    /       http://1.example.com:8888/
    RewriteEngine       On
    # RewriteLog          /tmp/rewrite.log

    RewriteBase /

    RewriteCond %{HTTP_Host} !^example.com$
    RewriteRule !^/(.) http://example.com/$1 [L,R]

    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^(user\d/)$  $1faces/main.jsf [L,R]
</VirtualHost>

これはuser0..user9では機能しますが、user10では機能しません。それが問題である場合は、最後の書き換えルールを変更して^(user\d + /)$を使用します

2
John Auld
<VirtualHost *:80>
 ServerName example.com

 RewriteEngine On
 RewriteRule ^/user1/(.*) http://1.example.com:8888/user1/faces/main.jsf$1 [L,P]
 RewriteRule ^/user1(.*) http://1.example.com:8888/user1/faces/main.jsf$1 [L,P]
 RewriteRule ^/(.*) http://1.example.com:8888/$1 [L,P]
</VirtualHost>

例えば:

http://example.com/user2 -> http://1.example.com:8888/user2

http://example.com/user1 -> http://1.example.com:8888/user1/faces/main.jsf

http://example.com/user1/ -> http://1.example.com:8888/user1/faces/main.jsf

http://example.com/user1;jsessionid=Z_DV-bY6MuQGlIvflPwgdKDk60cNzOkWXbC5G18ILrjR0jKoGWnd!-617980607

->

http://1.example.com:8888/user1/faces/main.jsf;jsessionid=Z_DV-bY6MuQGlIvflPwgdKDk60cNzOkWXbC5G18ILrjR0jKoGWnd!-617980607

[P]は、バックエンドとの間でリクエストをプロキシします。

/ user2->/user9も機能することを実際に意図していない限り、それで十分です。そうであれば、正確に探しているものを言ってください。あなたに正しいルールを与えることができます:-)

上記を機能させるには、もちろん、プロキシ、proxy_http、および書き換えmodを有効にする必要があります。

1
Ian Macintosh

これは、英数字を含む第1レベルのディレクトリで機能するはずです。

<VirtualHost *:80>
    ServerName          example.com
    ProxyPass           /       http://1.example.com:8888/
    ProxyPassReverse    /       http://1.example.com:8888/
    RewriteEngine       On
    # RewriteLog          /tmp/rewrite.log

    RewriteCond %{HTTP_Host} !^example.com$
    RewriteRule ^/(.) http://example.com/$1 [L,R]

    RewriteRule ^/([a-z0-9]+)/?$  /$1/faces/main.jsf [L,R,NC]
</VirtualHost>
1
Vivek Thomas

書き換えルールの何が問題になっているのか尋ねました。構成内の次の2行を見てください。

RewriteCond %{REQUEST_URI}  !^/(.+/)faces/main.jsf.*
RewriteRule !^(.+)/faces/main.jsf.*$  $1/faces/main.jsf [L,R]

URLにfaces/main.jsfビットがまだない場合、RewriteCondルールは一致します。それはうまく見えます。その場合、RewriteRuleは/faces/main.jsfと一致しようとしてはなりません。私はあなたが先頭の「!」で何が起こると期待するのか本当にわかりません。そのパターンで。

多分あなたはこのようなものが欲しいでしょう:

RewriteCond %{REQUEST_URI}  !^/(.+/)faces/main.jsf.*
RewriteRule ([^;]*)(;.*)? $1/faces/main.jsf$2 [L,R]]

';'を使用した構築これは非常に珍しいことであり、システムでそれを見た場合、それが実際に必要なものであることを再確認します(それはあなたの質問ではありませんでしたが)。 A ';' '?'の後'&'と同じ方法で使用できるため、htmlでエスケープする必要が少なくなります。それはあなたが意味したことでしたか?もしそうなら、あなたは「?」の後のURLの部分を知っているべきですRewriteRuleに供給されるものの一部ではありません。

1
mc0e