diff --git a/trac/wiki/api.py b/trac/wiki/api.py
--- a/trac/wiki/api.py
+++ b/trac/wiki/api.py
@@ -307,6 +307,21 @@
         if version and query:
             query = '&' + query[1:]
         pagename = pagename.rstrip('/')
+        if formatter.resource and formatter.resource.realm == 'wiki' \
+                              and not pagename.startswith('/'):
+            prefix = formatter.resource.id
+            if '/' in prefix:
+                while '/' in prefix:
+                    prefix = prefix.rsplit('/', 1)[0]
+                    name = prefix + '/' + pagename
+                    if self.has_page(name):
+                        pagename = name
+                        break
+                else:
+                    if not self.has_page(pagename):
+                        pagename = formatter.resource.id.rsplit('/', 1)[0] \
+                                   + '/' + pagename
+        pagename = pagename.lstrip('/')
         if 'WIKI_VIEW' in formatter.perm('wiki', pagename, version):
             href = formatter.href.wiki(pagename, version=version) + query \
                    + fragment
diff --git a/trac/wiki/templates/wiki_view.html b/trac/wiki/templates/wiki_view.html
--- a/trac/wiki/templates/wiki_view.html
+++ b/trac/wiki/templates/wiki_view.html
@@ -44,7 +44,17 @@
           ${wiki_to_html(context, page.text)}
         </py:when>
         <py:otherwise>
-          Describe ${name_of(page.resource)} here.
+          <p>Describe ${name_of(page.resource)} here.</p>
+          <py:if test="'/' in page.name" py:with="parts = page.name.split('/')">
+            <p>Alternatively, you can also create the page higher in the hierarchy:</p>
+            <ul>
+              <li py:for="i in range(len(parts) - 2, -1, -1)"
+                  py:with="name = '/'.join(parts[:i] + [parts[-1]]); has_perm = 'WIKI_VIEW' in perm('wiki', name)">
+                <a href="${href.wiki(name)}" class="${has_perm and 'missing' or 'forbidden'} wiki" rel="nofollow"
+                   title="${not has_perm and _('no permission to view this wiki page') or None}">${name}?</a>
+              </li>
+            </ul>
+          </py:if>
         </py:otherwise>
       </div>
 
diff --git a/trac/wiki/tests/wikisyntax.py b/trac/wiki/tests/wikisyntax.py
--- a/trac/wiki/tests/wikisyntax.py
+++ b/trac/wiki/tests/wikisyntax.py
@@ -319,6 +319,41 @@
 ------------------------------
 """ # "
 
+SCOPED_LINKS_TESTS=u"""
+============================== Scoped links for hierarchical pages
+ThirdLevel
+[wiki:ThirdLevel]
+OtherThirdLevel
+[wiki:OtherThirdLevel]
+SecondLevel
+[wiki:SecondLevel]
+FirstLevel
+[wiki:FirstLevel]
+TestPage
+[wiki:TestPage]
+MissingPage
+[wiki:MissingPage]
+["/OtherThirdLevel"]
+[wiki:/OtherThirdLevel]
+------------------------------
+<p>
+<a class="wiki" href="/wiki/FirstLevel/SecondLevel/ThirdLevel">ThirdLevel</a>
+<a class="wiki" href="/wiki/FirstLevel/SecondLevel/ThirdLevel">ThirdLevel</a>
+<a class="wiki" href="/wiki/FirstLevel/SecondLevel/OtherThirdLevel">OtherThirdLevel</a>
+<a class="wiki" href="/wiki/FirstLevel/SecondLevel/OtherThirdLevel">OtherThirdLevel</a>
+<a class="wiki" href="/wiki/FirstLevel/SecondLevel">SecondLevel</a>
+<a class="wiki" href="/wiki/FirstLevel/SecondLevel">SecondLevel</a>
+<a class="wiki" href="/wiki/FirstLevel">FirstLevel</a>
+<a class="wiki" href="/wiki/FirstLevel">FirstLevel</a>
+<a class="wiki" href="/wiki/TestPage">TestPage</a>
+<a class="wiki" href="/wiki/TestPage">TestPage</a>
+<a class="missing wiki" href="/wiki/FirstLevel/SecondLevel/MissingPage" rel="nofollow">MissingPage?</a>
+<a class="missing wiki" href="/wiki/FirstLevel/SecondLevel/MissingPage" rel="nofollow">MissingPage?</a>
+<a class="missing wiki" href="/wiki/OtherThirdLevel" rel="nofollow">/OtherThirdLevel?</a>
+<a class="missing wiki" href="/wiki/OtherThirdLevel" rel="nofollow">/OtherThirdLevel?</a>
+</p>
+------------------------------
+""" # "
 
 def wiki_setup(tc):
     now = datetime.now(utc)
@@ -354,12 +389,35 @@
 """ 
     imt.save('joe', 'test InterWiki links', '::1', now)
 
+    w = WikiPage(tc.env)
+    w.name = 'FirstLevel'
+    w.text = '--'
+    w.save('joe', 'first level of hierarchy', '::1', now)
+    
+    w = WikiPage(tc.env)
+    w.name = 'FirstLevel/SecondLevel'
+    w.text = '--'
+    w.save('joe', 'second level of hierarchy', '::1', now)
+    
+    w = WikiPage(tc.env)
+    w.name = 'FirstLevel/SecondLevel/ThirdLevel'
+    w.text = '--'
+    w.save('joe', 'third level of hierarchy', '::1', now)
+    
+    w = WikiPage(tc.env)
+    w.name = 'FirstLevel/SecondLevel/OtherThirdLevel'
+    w.text = '--'
+    w.save('joe', 'other third level of hierarchy', '::1', now)
+
 
 def suite():
     suite = unittest.TestSuite()
     suite.addTest(formatter.suite(TEST_CASES, wiki_setup, __file__))
     suite.addTest(formatter.suite(RELATIVE_LINKS_TESTS, wiki_setup, __file__,
                                   context=('wiki', 'Main/Sub')))
+    suite.addTest(formatter.suite(SCOPED_LINKS_TESTS, wiki_setup, __file__,
+                                  context=('wiki', 
+                                      'FirstLevel/SecondLevel/ThirdLevel')))
     return suite
 
 if __name__ == '__main__':

