使用 .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 文件

.htaccess 没有文件夹的根重写

更改根视图控制器将 IBOutlet 设为 nil

根文件夹中网站的 HTML 到 PHP 重定向?

使用.htaccess更改共享服务器中的文档根文件夹

通过 htaccess 将 index.html 和所有 http、https、www 和非 www 版本的主页 URL 重定向到 https://www 根 URL 的 301