独自のデザインのドッカーコンテナでDrupal 7を使用してCiviCRMを実行しようとしています。
残念ながら、CiviCRMが何らかの理由で不正なリソース要求を出力しているという問題に直面しています。次のような場合もあります(「...」はリソースへの残りのパスを意味します):
/... (good)
/civicrm/... (good)
時々このように:
/civicrm/sitename/... (bad)
時々このように:
/sitename/... (bad)
時々このように:
/civicrm/sitename/civicrm (bad)
時々このように:
/civicrm/sitename/civicrm/sitename/... (very bad)
など、おそらく無限:
/civicrm/sitename/civicrm/sitename/civicrm/... (very bad)
今、正規表現は私の得意ではありません。多くのハミングとハーリングの後、私は以下を作成することができました。
location /civicrm/sitename {
rewrite ^/civicrm/sitename/(.*)$ /$1;
}
location /sitename/ {
rewrite ^/sitename/(.*)$ /$1;
}
現在、多くのリソースの負荷が高くなっていますが、これですべての問題が検出されるわけではありません。私が定義できる最高のものはこれです:
#If the URL contains a / followed by any characters or none followed by a / followed by sitename followed by any characters or none, remove sitename:
rewrite /(?./)sitename/(?.)$ $;
# Then continue processing the next directive.
#If the rewritten URL contains /civicrm/ more than once, remove all instances of /civicrm/ then add it once:
rewrite /(?./)civicrm/civicrm/(?.)$ /civicrm/$;
助けがありますか?
URLに/の後に任意の文字が含まれる場合、またはnoneの後に/が続き、sitenameの後に任意の文字が続く場合、またはnoneの場合、sitenameを削除します。
rewrite ^(.+)/sitename(/.*)$ $1$2;
説明:結果を作成するために、一致の前($1
)と後($2
)のすべてをキャプチャする必要があります。
書き換えられたURLに/ civicrm /が2回以上含まれる場合、/ civicrm /のすべてのインスタンスを削除してから1回追加します。
rewrite "^(.*?)(?:/civicrm){2,}(/.*?)$" $1/civicrm$2;
説明:上記と同じですが、2つ以上の非キャプチャ/civicrm
文字列が一致し、最初と最後のキャプチャが遅延していることを除きます。 {
を含む式は引用符で囲む必要があります。
正規表現に役立つリソースは here です。