Yesodのアプリケーションで以下のように設定しています。

config/routes

/ HomeR GET POST

config/settings.yml

host:           "_env:HOST:*4" # any IPv4 host
port:           "_env:PORT:3000"
approot:        "_env:APPROOT:somedir/"

この状態で "http://localhost:3000/somedir/" にアクセスしても HomeR のハンドラが呼ばれません。 yesod のアプリケーションを特定のパスの下で動くようにするにはどのようにすればよいのでしょう。

追記
リバースプロキシを使用するという提案がありました。
Apacheのmod_proxyで以下のように設定します。

Redirect /somedir /somedir/
ProxyPass /somedir/ http://localhost:3000/

これで http://localhost/somedir/ にアクセスすると HomeR にはアクセスできます。ただしテンプレート内で展開したURLに /somedir/ が付かないため CSS やすべてのリンクが破綻します。

たとえば以下のようなテンプレートを書きます。

<a href="@{HomeR}">ホーム</a>

これは <a href="http://localhost:3000/">ホーム</a> に展開されます。ApprootRelative を使用した場合は <a href="/">ホーム</a> です。これではサイトが機能しません。

これを回避するにはconfig/routesを解釈する時点でsomedirを注入するのが適切だと思います。ただし stack のテンプレートを使用したプロジェクトではmkYesodDataでルートを構築する時点が環境変数を読むタイミングではなく環境変数にアプリケーションルートのディレクトリを指定して起動するという書き方ができずにいます。

mkYesodDataを使用せずにルートを構築するか、mkYesodData相当のものを実装するか勉強中です。