/_layouts/1033/error.htmはどのように機能しますか?
-
09-12-2019 - |
質問
私は立ち往生していて、SharePoint Indepthを知っている人を必要としています!
編集
これは、404,403のような他のエラーのためではなく、このエラーは他のものです! Central Adminではブロックされたファイルタイプがある場合にのみ表示され、 https://site.mysite.com/portal/default.asp 、ASP拡張機能はブロックされたファイルタイプです。その後、error.htmページのみが表示されます。 Default.aspxであれば、通常のBESUCE ASPXがブロックされたファイルタイプリストには機能していません
終了
何か論理を上書きしていますが、私は何を知りません!
SharePoint Central AdminでASPのようなファイルタイプをブロックしたとしました。
これでURLに進み、拡張.aspxから削除して、.asp です。
タイトルエラーを持つHTMLページを表示し、
管理者によって次のファイルがブロックされています。 /portal/default.asp
/ leayouts/1033/eRror.htm、の12 HiveからのHTMページを取っています。
カスタムページにリダイレクトしたいが、そのerror.htmが呼び出されている場所を知っておく必要がありますので、代わりにカスタムError.aspxページに移動することができます。
リダイレクトには以下を使用しましたが、うまくいかない:
.HttpContext.Current.Server.ClearError(); HttpContext.Current.Response.Clear(); strCustomAcssDndURL = getAppSettingsValue(m_SiteCollCustError + "-" + strSiteURL); HttpContext.Current.Response.Redirect(strCustomAcssDndURL, false);
しかし、それは故障します:
.HttpContext.Current.Response.Redirect();
エラーをスローします:
HTTPヘッダーが送信された後にリダイレクトできません。
私は何をすべきか、そしてそれが可能なのかどうかに関して少し混乱しています!上記のコードを取得するその他のエラーについては完璧に機能します!
あらゆる助けが大幅に認められるでしょう:)
解決 3
OK IVはそれを考え出した:
int init i httpApplicationオブジェクトを作成し、呼び出されたイベントハンドラを作成しました。
context.EndRequest += new EventHandler(context_AcessDenied);
.
しかし、この問題はヘッダーを送っていたものであり、私はそれが送信されるのに応じて要求をキャッチすることができませんでした!だから私がしたことは次のとおりでした:
context.BeginRequest += new EventHandler(context_BeginRequest);
.
その後、URLに入力したファイルの広がりのためにブロックされたリストを検索し、右の場所へのリダイレクトのリスト内のファイルの内側に検索されます。
private void context_BeginRequest(object sender, EventArgs e)
{
HttpApplication httpApp = sender as HttpApplication;
HttpContext context = httpApp.Context;
string httpUrl = context.Request.Url.ToString();
string strCustomAcssDndURL = string.Empty;
string strSiteURL = string.Empty;
if (!httpUrl.ToLower().Equals(null) && !httpUrl.ToLower().Contains("/_layouts/"))
{
string[] breakURL = httpUrl.Split('.');
int count = breakURL.Length - 1;
string extension = breakURL[count].ToString();
Uri siteUrl = new Uri(httpUrl);
SPWebApplication webApplication = SPWebApplication.Lookup(siteUrl); ;
Collection<string> coll = webApplication.BlockedFileExtensions;
try
{
if (coll.Contains(extension))
{
strSiteURL = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority);
HttpContext.Current.Server.ClearError();
HttpContext.Current.Response.Clear();
strCustomAcssDndURL = getAppSettingsValue(m_SiteCollCustError + "-" + strSiteURL);
HttpContext.Current.Response.Redirect(strCustomAcssDndURL, false);
}
}
catch (Exception a)
{
//
}
}
}
.
私はそれがそれがそうでなければならないようにendRequest内の他のエラー処理コードを保持しました。そのため、この問題に対する最初の解決策のようになるように見えます。
他のヒント
カスタムエラーページの定義SharePointサイトのweb.configで行われます。
ページ内でリダイレクトしようとしている場合は、 'httpcontext.current' なしでリダイレクトしてみてください。
これをweb.configで設定する代わりに、これにSharePointオブジェクトモデルを使用しないのですか?
これは私が過去に使用したPowerShellスクリプトですカスタムエラーページを設定します。
2007:
$webapp = [Microsoft.SharePoint.Administration.SPWebApplication]::Lookup("http://thewebapp")
$webapp.UpdateMappedPage([Microsoft.SharePoint.Administration.SPWebApplication+SPCustomPage]::Error, "/_layouts/yourerrorpage.html")
$webapp.Update($true)
.
2010:
$webapp = Get-SPWebApplication "http://thewebapp"
$webapp.UpdateMappedPage([Microsoft.SharePoint.Administration.SPWebApplication+SPCustomPage]::Error, "/_layouts/yourerrorpage.html")
$webapp.Update($true)
.
SPWebApplication.SPCustomPage
Enum 。適切な列挙体を表すために、2行目の部分を( "::Error
"のように)変更するだけです。