使用 .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 On
和RewriteRule ^$ /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(参见 <base>
)。
另一种方法是在服务器端根据请求 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 为开发和生产动态设置配置变量