使用.htaccess将web根文件夹设为子文件夹?

时间:2012-04-28 15:31:45

标签: .htaccess mod-rewrite directory

我正在开发一个非常复杂的项目,所以我想使用一个有意义的文件/文件夹结构。

我想要的文件夹/文件结构是:

.htaccess
/php/
/assets/

我想拥有人们可以访问的网页:

/php/views/pages/

我想知道是否可以仅使用.htaccess/php/views/pages设置为“可见根”,例如,当人们访问http://mydomain.com/时,他们将会查看http://mydomain.com/php/views/pages/index.php,如果是的话,我该怎么做呢?

此外,是否可以使用/php/views/pages规范化对.htaccess的所有访问,并使用301重定向来停止在搜索引擎中编入索引的多个链接?

1 个答案:

答案 0 :(得分:27)

如果您无权访问主机配置

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]
    
  5. 如果您有权访问主机配置

    忘掉.htaccess文件并使用它。示例配置可能看起来像

    # ~base stands for your original DocumentRoot
    <VirtualHost *:80>
        DocumentRoot ~base/php/views/pages
        Alias /assets ~base/assets
    
        # other configuration parameters
    </VirtualHost>