Независимо от того, что Вы выбираете, если это будет выставлено общедоступному Интернету, Вы хотите удостовериться, что это поддерживает selinux
. Это сохранило мой зад по крайней мере в одном случае, где иначе я, конечно, стал бы взломанным из-за дефекта безопасности в программном обеспечении, я установил. Не только сделал selinux
полностью заблокируйте нападение, но через setroubleshoot
это повысило всплывающее окно для предупреждения меня об этом.
Это - вид гетто, но это мог бы быть простой способ решить Вашу проблему.
Вот немного отрывка кода ASP.NET, который мог действовать как 404 обработчика:
string qs = Page.Request.QueryString.ToString();
qs = Server.UrlDecode(qs);
int c = qs.LastIndexOf("/");
string filepath = qs.Substring(c+1);
Response.Redirect("/cblah/"+filepath);
Вы могли, вероятно, сделать это через пользовательский записанный фильтр ISAPI, но я не знаю ни о каком пути в IIS или существующем продукте, который сделал бы точно, что Вы ищете.
IIRF является свободным URL Rewriter, который имеет возможность проверить на существование каталога перед перезаписью. Правила были бы похожи:
# This rule matches, eg, http://server/blah/test.html
# It does "no rewrite" (-) if the file c:\blah\test.html does NOT exist.
# The url stub /blah must map to an existing vdir.
RewriteCond c:\blah\$1 !-f
RewriteRule ^/blah/(.*)$ - [L]
# If the file does exist, rewrite to the alternative vdir.
RewriteCond c:\blah\$1 -f
RewriteRule ^/blah/(.*)$ /override-vdir/$2 [L]
Вы можете также подстановочный знак "вздор". Чтобы сделать это, Вам была бы нужна конвенция для именования переопределения vdirs. Это выглядело бы примерно так:
# This rule matches, eg, http://server/blah/test.html
# It does nothing if the file c:\blah\test.html does not exist.
RewriteCond c:\$1\$2 !-f
RewriteRule ^/([^/]+)/(.*)$ - [L]
RewriteCond c:\$1\$2 -f
RewriteRule ^/([^/]+)/(.*)$ /override-$1/$2 [L]
Существуют также условия для тестирования существования каталога. Проверьте документ IIRF на детали.