私はこれを機能させようとしています。クエリ文字列から読み取り、いくつかの手順を実行する DNN モジュールがあります。そのすべてがうまく機能しています。今、クエリ文字列の読み取り中に URL をクリーンアップしようとしています
現在、URL は次のようになっています。
http://mysite.website.com/?pid=1234
私はそれが次のようになりたい:
http://mysite.website.com/1234
このようなことは可能ですか?
私はこれを機能させようとしています。クエリ文字列から読み取り、いくつかの手順を実行する DNN モジュールがあります。そのすべてがうまく機能しています。今、クエリ文字列の読み取り中に URL をクリーンアップしようとしています
現在、URL は次のようになっています。
http://mysite.website.com/?pid=1234
私はそれが次のようになりたい:
http://mysite.website.com/1234
このようなことは可能ですか?
DotNetNuke 用の適切な書き換えソリューションを使用する方がはるかに優れています (たとえば、iFinity UrlMaster や他にもあります...)。
次に、モジュールのカスタム URL プロバイダーを作成できます。
これは、記事モジュールの一部を書き直すために自分のサイトで行ったことです (例: www.ventrian.com/blog/
urlmaster の詳細については、次を参照してください。
HttpModule を使用すると、DNN とまったく対話せずに、探していることを達成できます。このような種類:
public class PidRewriteModule : System.Web.IHttpModule
{
public void Dispose()
{
}
public void Init(System.Web.HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest);
}
void context_BeginRequest(object sender, EventArgs e)
{
HttpApplication app = sender as HttpApplication;
if (app != null)
{
Match mPidCheck = new Regex(@"^/(?<pid>[0-9]+)/?$").Match(app.Context.Request.Url.AbsolutePath);
if (mPidCheck.Success)
{
app.Context.RewritePath("~/default.aspx", String.Empty, String.Concat("pid=", mPidCheck.Groups["pid"].Value));
}
}
else
return;
}
}
次に、これを Web.config に追加できます。
<modules runAllManagedModulesForAllRequests="true">
<add name="PidRewriteModule" type="Assembly.Namespace.PidRewriteModule, Assembly"/>
</modules>
これを system.webServer ノードに入れます。Assembly と Namespace をそれぞれ置き換えます。
この情報はすべて IIS7 用です。IIS 6 の場合もまったく違いはありませんが、以前の実装では ISAPI フィルターのルートをたどる必要がありました。
いくつかの選択肢があります:
2a. IIS 7 以降の URL 書き換えモジュール
2b. HeliconTech の「ISAPI_Rewrite 3」 (無料版もあり、かなりうまく機能します)
URL Rewriter モジュールの使用を見てください。IIS6 用のサードパーティ製のものはいくつかありますが、Microsoft は IIS7 および IIS7.5 用のものを提供しています。基本的には正規表現で構成し、出力を変更します。
IIS7 用の Microsoft の書き換えモジュールは、http ://www.iis.net/downloads/microsoft/url-rewrite で入手できます。