使用 .htaccess 将 Web 根文件夹设为子文件夹?
Posted
技术标签:
【中文标题】使用 .htaccess 将 Web 根文件夹设为子文件夹?【英文标题】:Make web root folder a sub-folder with .htaccess? 【发布时间】:2012-05-09 01:07:38 【问题描述】:我正在处理一个非常复杂的项目,所以我想使用一个有意义的文件/文件夹结构。
我想要的文件夹/文件结构是:
.htaccess
/php/
/assets/
我想要人们可以访问的网页:
/php/views/pages/
我想知道是否可以仅使用 .htaccess
将 /php/views/pages
设置为“可查看的根”,例如,当人们访问 http://mydomain.com/
时,他们将查看 http://mydomain.com/php/views/pages/index.php
,如果那么,我该怎么做呢?
另外,是否可以使用 .htaccess
和 301 重定向规范对 /php/views/pages
的所有访问,以阻止多个链接在搜索引擎中被索引?
【问题讨论】:
为什么不能更改DocumentRoot
指令?
【参考方案1】:
如果您无权访问您的主机配置
DocumentRoot
只能用于服务器和虚拟主机配置,.htaccess 必须是。
让我们在 .htaccess 中添加指令
RewriteEngine on
我假设你想让 /assets 的请求通过
#if a match for asset is found, do nothing
RewriteRule ^assets/ - [L]
如果请求尝试直接访问/php/views/pages/
,请将其重定向到其规范版本
RewriteCond %THE_REQUEST php/views/pages/
RewriteRule ^php/views/pages/(.*) http://mydomain.com/$1 [R=301,L]
并添加一条规则以将其他所有内容映射到/php/views/pages/
RewriteCond %REQUEST_URI !php/views/pages/
RewriteRule ^(.*)$ /php/views/pages/$1 [L]
如果您有权访问您的主机配置
忘记 .htaccess 文件并使用它。示例配置可能如下所示
# ~base stands for your original DocumentRoot
<VirtualHost *:80>
DocumentRoot ~base/php/views/pages
Alias /assets ~base/assets
# other configuration parameters
</VirtualHost>
【讨论】:
太棒了。赏金有时间上限,所以当它完成时我会奖励给你:)。非常感谢您的解释性回答。以上是关于使用 .htaccess 将 Web 根文件夹设为子文件夹?的主要内容,如果未能解决你的问题,请参考以下文章
通过 htaccess 将 index.html 和所有 http、https、www 和非 www 版本的主页 URL 重定向到 https://www 根 URL 的 301