diff --git a/pygments/lexers/configs.py b/pygments/lexers/configs.py
index 241623d3aa..8b67ebafd4 100644
--- a/pygments/lexers/configs.py
+++ b/pygments/lexers/configs.py
@@ -302,8 +302,10 @@ class ApacheConfLexer(RegexLexer):
'root': [
(r'\s+', Text),
(r'#(.*\\\n)+.*$|(#.*?)$', Comment),
- (r'(<[^\s>]+)(?:(\s+)(.*))?(>)',
+ (r'(<[^\s>/][^\s>]*)(?:(\s+)(.*))?(>)',
bygroups(Name.Tag, Text, String, Name.Tag)),
+ (r'([^\s>]+)(>)',
+ bygroups(Name.Tag, Name.Tag)),
(r'[a-z]\w*', Name.Builtin, 'value'),
(r'\.+', Text),
],
diff --git a/tests/test_apache_conf.py b/tests/test_apache_conf.py
index 4ec33936e3..a19cb84288 100644
--- a/tests/test_apache_conf.py
+++ b/tests/test_apache_conf.py
@@ -99,3 +99,36 @@ def test_fix_lock_absolute_path(lexer):
(Token.Text, '\n'),
]
assert list(lexer.get_tokens(fragment)) == tokens
+
+def test_normal_scoped_directive(lexer):
+ fragment = '\n'
+ tokens = [
+ (Token.Name.Tag, ''),
+ (Token.Text, '\n'),
+ (Token.Name.Tag, ''),
+ (Token.Text, '\n')
+ ]
+ assert list(lexer.get_tokens(fragment)) == tokens
+
+def test_malformed_scoped_directive_closing_tag(lexer):
+ fragment = '\n'
+ tokens = [
+ (Token.Name.Tag, ''),
+ (Token.Text, '\n'),
+ (Token.Error, '<'),
+ (Token.Error, '/'),
+ (Token.Name.Builtin, 'VirtualHost'),
+ (Token.Text, ''),
+ (Token.Text, '\n'),
+ (Token.Error, '>'),
+ (Token.Text, '\n')
+ ]
+ assert list(lexer.get_tokens(fragment)) == tokens
+