2016-04-13 2 views
0

Apache2, Ubuntu, /etc/apache2/sites-available/default.confAliasMatch: Матч на всех, за исключением, если хэш

требуется только номер 1, чтобы быть алиасом, номер 2 не делает. мне нужно AliasMatch регулярное выражение, которое опускает любой URL с ^/#, иначе проходит $ 1 в новый/путь/$ 1

  1. url.com/some_dir
  2. url.com/#/some_dir

Я пробовал следующие подходы: Первый переадресовывает как 1, так и 2, потому что (. *). Вторые не работают вообще. Третий тоже не работает, но я пытался сопоставить буквенно-цифровые символы, чтобы по умолчанию пропускать #, он также не работает.

AliasMatch "(?i)^/(.*)$" "/new/path/$1" 
AliasMatch "(?i)^((?!#).)*$" "/new/path/$1" 
AliasMatch "^/[a-zA-Z0-9_-]+$" "/new/path/$1" 

Как опустить URL 2 в то же время позволяя URL-быть Связан надлежащим образом?

ответ

1

Попробуйте это регулярное выражение: ^[^#]+$

Или это один: ^.*?/[^#]+$

Они довольно понятно.

Я не уверен, что именно вы хотите захватить. Кажется, вы знаете, как использовать группы захвата, поэтому вы можете добавить некоторые. Или, если вы не знаете, хотите ли вы ВСЕ из регулярного выражения, вы можете использовать $0.

Edit:

Try: ^[^/]*/([^#]+)$

Это один отрубит все после последнего слеша: ^[^/]*/([^#]+)/[^#/]+$

И это один получает контент между первой и второй косой чертой: ^[^/]*/([^#/]+)/

+0

Я понимаю большинство из них; но по какой-то причине я просто не могу решить эту проблему. Я пытаюсь захватить все после косой черты в примере 1, если он не начинается с символа #. Я пробовал различные формы вашего предлагаемого регулярного выражения, безрезультатно. Я думаю, что это довольно близко .. –

+0

@MattBunch Я добавил еще один. Он должен быть лучше и быстрее, чем два других, и он работает в моих тестах. (Я думаю, что ваш аромат регулярного выражения достаточно стандартный, чтобы работать с ним.) – Laurel

+0

ближе. :) теперь проблема в том, что apache aliases url, но добавляет /index.html, тогда регулярное выражение снова запускается и добавляет /index.html/index.html и т. д., так что нам нужно добавить еще одно условие только захватить то, что находится между domain.com/ [это]/[а не это]/[или это]/[и т. д.] Интересно, не лучший ли это подход к решению моей проблемы. (FYI apache2 использует "Perl Compatible Regular Expression словарь") Регулярное выражение работает при тестировании на этом сайте: [ссылка] (http://www.regexplanet.com/advanced/perl/index.html) –

Смежные вопросы