Вот конфигурация Apache httpd, которая должна работать:
RewriteEngine On
RewriteRule ^/outlook$ https://example.com/email.aspx [P,L]
RewriteRule ^/([^./])/?$ https://example.com/$1.aspx [P,L]
При этом используется обратный прокси-сервер для обслуживания страниц, подобных email.aspx
и foobar.aspx
, когда даны «outlook» и «foobar» без раскрытия их расширений. пользователям.
1119 Хотя, похоже, вы пытаетесь вернуться назад по какой-то причине. В этом случае вы захотите:
RewriteEngine On
RewriteRule ^/email\.aspx$ https://example.com/outlook [L]
RewriteRule ^/([^.]+)\.aspx$ https://example.com/$1 [L]
& nbsp;
Regex , условные выражения не могут выполнить вашу задачу. Структура регулярного выражения:
(?(condition)yes-pattern|no-pattern)
condition
является либо (R)
, что верно при оценке внутри рекурсии или eval yes-pattern
- регулярное выражение для сопоставления, если условие истинно no-pattern
- необязательное регулярное выражение для сопоставления, если условие ложно Следовательно, вы не могу вставить новый текст в совпадение с помощью условного выражения.
Насколько мне известно, нет собственной функции WPF для получения размеров текущего монитора. Вместо этого вы можете PInvoke встроить функции нескольких мониторов , обернуть их в управляемый класс и предоставить все свойства, необходимые для их использования из XAML.
Я создал небольшую обертку вокруг экрана от System.Windows.Forms, в настоящее время все работает ... Не уверен в том, что «Независимые пиксели устройства».
public class WpfScreen
{
public static IEnumerable<WpfScreen> AllScreens()
{
foreach (Screen screen in System.Windows.Forms.Screen.AllScreens)
{
yield return new WpfScreen(screen);
}
}
public static WpfScreen GetScreenFrom(Window window)
{
WindowInteropHelper windowInteropHelper = new WindowInteropHelper(window);
Screen screen = System.Windows.Forms.Screen.FromHandle(windowInteropHelper.Handle);
WpfScreen wpfScreen = new WpfScreen(screen);
return wpfScreen;
}
public static WpfScreen GetScreenFrom(Point point)
{
int x = (int) Math.Round(point.X);
int y = (int) Math.Round(point.Y);
// are x,y device-independent-pixels ??
System.Drawing.Point drawingPoint = new System.Drawing.Point(x, y);
Screen screen = System.Windows.Forms.Screen.FromPoint(drawingPoint);
WpfScreen wpfScreen = new WpfScreen(screen);
return wpfScreen;
}
public static WpfScreen Primary
{
get { return new WpfScreen(System.Windows.Forms.Screen.PrimaryScreen); }
}
private readonly Screen screen;
internal WpfScreen(System.Windows.Forms.Screen screen)
{
this.screen = screen;
}
public Rect DeviceBounds
{
get { return this.GetRect(this.screen.Bounds); }
}
public Rect WorkingArea
{
get { return this.GetRect(this.screen.WorkingArea); }
}
private Rect GetRect(Rectangle value)
{
// should x, y, width, height be device-independent-pixels ??
return new Rect
{
X = value.X,
Y = value.Y,
Width = value.Width,
Height = value.Height
};
}
public bool IsPrimary
{
get { return this.screen.Primary; }
}
public string DeviceName
{
get { return this.screen.DeviceName; }
}
}
При использовании какого-либо полноэкранного окна (имеющий WindowState = WindowState.Maximized, WindowStyle = WindowStyle.None
), можно перенести его содержание в System.Windows.Controls.Canvas
как это:
<Canvas Name="MyCanvas" Width="auto" Height="auto">
...
</Canvas>
Затем можно использовать MyCanvas.ActualWidth
и MyCanvas.ActualHeight
для получения разрешения текущего экрана с принятыми во внимание настройками DPI и в независимых от устройств единицах. Это не добавляет полей, как само максимизируемое окно делает.
(Холст принимает UIElement
с как детей, таким образом, необходимо смочь использовать его с любым содержанием.)
Уделите время сканированию членов SystemParameters.
Они даже учитывают относительное положение экранов.
Проверено только с двумя мониторами.