【问题标题】:Make web root folder a sub-folder with .htaccess?使用 .htaccess 将 Web 根文件夹设为子文件夹?
【发布时间】: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 指令?

标签: .htaccess mod-rewrite directory


【解决方案1】:

如果您无权访问您的主机配置

DocumentRoot 只能用于服务器和虚拟主机配置,.htaccess 必须是。

  1. 让我们在 .htaccess 中添加指令

    RewriteEngine on
    
  2. 我假设你想让 /assets 的请求通过

    #if a match for asset is found, do nothing
    RewriteRule ^assets/ - [L]
    
  3. 如果请求尝试直接访问/php/views/pages/,请将其重定向到其规范版本

    RewriteCond %{THE_REQUEST} php/views/pages/
    RewriteRule ^php/views/pages/(.*) http://mydomain.com/$1 [R=301,L]
    
  4. 并添加一条规则以将其他所有内容映射到/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>

【讨论】:

  • 太棒了。赏金有时间上限,所以当它完成时我会奖励给你:)。非常感谢您的解释性回答。
猜你喜欢
  • 2021-11-20
  • 1970-01-01
  • 2017-07-27
  • 1970-01-01
  • 2014-01-13
  • 2015-10-06
  • 2016-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多