使用 .htaccess 将子目录设置为根目录 [关闭]

Posted

技术标签:

【中文标题】使用 .htaccess 将子目录设置为根目录 [关闭]【英文标题】:Using .htaccess to set a sub directory as root directory [closed] 【发布时间】:2012-03-13 20:42:36 【问题描述】:

有没有办法使用 htaccess 告诉子目录充当整个站点的根目录?

例如,如果我在http://localhost/testsite/ 下有一个网站,并且在它的 index.php 文件中,我使用以下代码引用了样式表..

<link rel="stylesheet" type="text/css" href="/css/layout.css" />

然后我可以加载 /localhost/testsite/css/layout.css 吗?

为了解决这个问题,我为每个站点设置了 localhost 子域,虽然可行,但并不理想。

非常感谢。

【问题讨论】:

设置虚拟主机。 正如 cillosis 所指出的,这通常会在站点的 Apache 配置中完成。只需将DocumentRoot 设置为所需的文件夹。 确保你有RewriteEngine OnRewriteRule ^$ /subdirectory [L] 【参考方案1】:

当然,所有相对 URI(如您的)都是相对于基本 URI,默认情况下是文档的 URI:

http://localhost/testsite/index.php

你只需要告诉添加哪个部分:

<link rel="stylesheet" type="text/css" href="./css/layout.css" />
                                             ^
                                             ` see this dot

例子:

Base URI      ::  http://localhost/testsite/index.php
Relative URI  ::  ./css/layout.css
Result        ::  http://localhost/testsite/css/layout.css

如果您需要更模块化,有多种方法可以做到这一点。一种是在 html 文档中显式设置基本 URI(参见 &lt;base&gt;)。

另一种方法是在服务器端根据请求 URI 和您网站的根路径相对解析链接。示例见this answer。

【讨论】:

【参考方案2】:

如果您想保留 'href="/css/layout.css"' 部分,那么可以,您可以设置重写规则。您只需要注意不要重定向以 /testsite 开头的任何内容(否则您将结束循环)。

喜欢(在根 .htaccess 中):

RewriteEngine On

RewriteCond %REQUEST_URI !^/testsite/.*$
RewriteRule ^(.*)$ /testsite/$1 [QSA,L]

在那里,您将能够从以下任一途径访问您的 layout.css 文件:

http://localhost/testsite/css/layout.css

http://localhost/css/layout.css

【讨论】:

以上是关于使用 .htaccess 将子目录设置为根目录 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 .htaccess 在除一个目录 /images 之外的所有 URL 上强制使用 HTTPS?

使用 apache config 和 htaccess 为开发和生产动态设置配置变量

使用 .htaccess 将变量重写到目录

使用 .htaccess 防止通过 /public/ 目录访问 Laravel [重复]

使用 htaccess URLrewrite 设置语言

htaccess 带有子目录的多语言站点,默认为 301