私のYesod-ApplicationはEnvoirement-Variableを使って取得する必要があります。 Thisはこの状況を正確に説明しているようです。しかし:その際、唯一のAPPROOTを検討しますイェソドによって生成されたリンクが、Quasiquoter parseRoutesでルート定義は、絶対にとどまる:だからAPPROOT設定Yesod:approseに応じてparseRoutes
mkYesod "App" [parseRoutes|
/HomeR GET
|]
は「domain.com/path」は動作しませんします"/ path"のルートはなく、 "/"のみのルートがあるためです。
このルートに相対的なルートを作成する方法はありますか?
更新:
私は "/ foo" というにAPPROOTを設定した場合、それが動作
instance Yesod Browser where
approot = ApprootMaster myApproot
cleanPath site s = do
if corrected == s
then Right $ dropprefix (Data.List.map dropDash s)
else Left $ dropprefix corrected
where
corrected = Data.List.filter (not . Data.Text.null) s
dropDash t
| Data.Text.all (== '-') t = Data.Text.drop 1 t
| otherwise = t
r = Data.Text.drop 1 $ myApproot site
l = Data.Text.length r
dropprefix l
| Data.List.take 1 l == [r] = Data.List.drop 1 l
| otherwise = l
...私もそれに応じてcleanPathを変更しようとしましたが、ホーム・ルートへのルートはまだ間違っています"/ foo/foo"にリダイレクトされる "/ foo /"につながる "@ {HomeR}"を除いて...
はい、そうです。私は2つの異なる場所でアプリケーションを実行したいので、すべてのルートが "/"にある独自のドメインで1回実行し、もう1回はドメインのサブフォルダ内で実行する必要があるためです。 – Nudin
私はcleanPathメソッドをオーバーライドしようとしましたが、正しく処理することはできません。あなたは私にヒントを与えることができますか? – Nudin
これを単一のファイルの例で再現できますか?どのようなエラーが発生しているかは私には明らかではありません。 –