我目前正在编写一个管理面板,为了组织起见,我已经做到这一点,所有页面都位于子目录而不是根目录中,我希望在子目录中访问这些页面来自根链接的目录。例如,index.php位于根目录中,可从以下位置访问:
http://localhost/index.php
但其余页面位于子目录中,如下所示:
//What the current link is
http://localhost/pages/page.php
//What I want the link to be
http://localhost/page.php
我的一些页面位于子目录的子目录中,如下所示:
//What the current link is
http://localhost/pages/page1/page.php
//What I want the link to be
http://localhost/page1/page.php
如您所见,我只想从链接中删除主子目录,即pages
。
我在互联网上环顾四周,据我所知,这可以通过.htacess
实现,但我找不到任何有用的东西。
你肯定找不到一个完美的解决方案,只需复制和粘贴即可解决所有任务。这种期望很奇怪。相反,您应该真正了解您想要使用的工具如何工作并能够找到您自己的解决方案。为此,在SO上确实有足够好的示例,此外,只需点击两下鼠标即可获得apache重写模块的__excellent_文档。
无论如何,她是一个建议,你仍然可能需要根据你的情况调整它:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?(.*)$ /pages/$1 [END]
如果您使用上述规则收到内部服务器错误(http状态500),那么很可能您运行的是非常旧版本的apache http服务器。在这种情况下,您将在http服务器错误日志文件中看到对不受支持的[END]
标志的明确提示。您可以尝试升级或使用较旧的[L]
标志,在这种情况下它可能会起作用,但这取决于您的设置。
此规则同样适用于http服务器主机配置或动态配置文件(“.htaccess”文件)内部。显然,重写模块需要加载到http服务器内并在http主机中启用。如果您使用动态配置文件,则需要注意在主机配置中完全启用它的解释,并且它位于主机的DOCUMENT_ROOT
文件夹中。
一般说法:您应该始终更喜欢将此类规则放在http服务器主机配置中,而不是使用动态配置文件(“.htaccess”)。这些动态配置文件增加了复杂性,通常是导致意外行为的原因,难以调试,它们确实会降低http服务器的速度。它们仅作为最后一个选项提供给您无法访问真正的http服务器主机配置(读取:非常便宜的服务提供商)或坚持编写自己的规则的应用程序(这是一个明显的安全噩梦)。