diff --git a/mercurial/hgweb/hgweb_mod.py b/mercurial/hgweb/hgweb_mod.py
--- a/mercurial/hgweb/hgweb_mod.py
+++ b/mercurial/hgweb/hgweb_mod.py
@@ -399,12 +399,6 @@
             if cmd not in webcommands.__all__:
                 msg = 'no such method: %s' % cmd
                 raise ErrorResponse(HTTP_BAD_REQUEST, msg)
-            elif cmd == 'file' and req.qsparams.get('style') == 'raw':
-                res.status = '200 Script output follows'
-                res.headers['Content-Type'] = ctype
-                content = webcommands.rawfile(rctx, wsgireq, tmpl)
-                assert content is res
-                return res.sendresponse()
             else:
                 # Set some globals appropriate for web handlers. Commands can
                 # override easily enough.
diff --git a/mercurial/hgweb/webcommands.py b/mercurial/hgweb/webcommands.py
--- a/mercurial/hgweb/webcommands.py
+++ b/mercurial/hgweb/webcommands.py
@@ -186,6 +186,9 @@
     If ``path`` is not defined, information about the root directory will
     be rendered.
     """
+    if web.req.qsparams.get('style') == 'raw':
+        return rawfile(web, req, tmpl)
+
     path = webutil.cleanpath(web.repo, req.req.qsparams.get('file', ''))
     if not path:
         return manifest(web, req, tmpl)