Piranha CMS を次の設定で使用しています。
<prefixlessPermalinks value="true" />
ただし、これにより、Permalink ヘルパーなどを使用して生成された個々の投稿の URL が壊れます。
@UI.Permalink(post.PermalinkId)
prefixlessPermalinks を False に設定すると、これは通常生成される URL になります: / home /1st-test-blog-entry
prefixlessPermalinks を True に設定すると、生成される URL は次のようになります: /1st-test-blog-entry (接頭辞がないため、「ホーム」は削除されています)
プレフィックスのない URL に従うと、次の例外が生成されます。
System.Web.HttpException: 先頭の .. を使用してトップ ディレクトリの上で終了することはできません。
この問題を回避する方法はありますか?
試行された回避策:
生成されたパーマリンクに手動で「/post」というプレフィックスを付けてから、リクエストをキャッチする次のルート マッピングを追加しました。
routes.MapRoute(
name: "Post",
url: "post/{permalink}",
defaults: new { controller = "Post", action = "Index", permalink = UrlParameter.Optional },
namespaces: new[] { "Maps.Portal.Controllers" }
).DataTokens["UseNamespaceFallback"] = false;
次のコントローラーがリクエストをキャッチします。
public ActionResult Index(string permalink)
{
var model = GetModel(permalink);
return View(model.GetView(), model);
}
ただし、読み取り専用の SinglePostController.CurrentPermalink プロパティが設定されていないため失敗し、Piranha CMS が例外をスローします。CurrentPermalink が CMS によって取り込まれているときに、投稿のドラフト バージョンが表示されているときに、このコントローラーが正しく起動することに注意してください。