配置.htaccess以将子文件夹用作root并屏蔽该URL

时间:2016-08-25 23:56:03

标签: .htaccess redirect mod-rewrite

我一直在互联网上尝试多种解决方案,无法让重定向伏都教工作。

设置

我的设置是使用jekyll构建的网站,我想将其作为mydomain.com/~user使用。

文件夹结构

~user
  - _site
    - index.html
    - folder1
      - index.html
    - folder2
      - index.html
  - other_stuff

问题

我能够从mydomain.com/~user重定向到mydomain.com/~user/_site。所以,中途通过。当我尝试再次屏蔽并从URL中删除_site时出现问题。我撞墙了。

基本上我想使用:mydomain.com/~user并在浏览器中查看该网址,同时为mydomain.com/~user/_site/index.html中的网页提供服务。其他链接也一样

Request                    See                         Served
=======                    =======                     =======
mydomain.com/~user         mydomain.com/~user          mydomain.com/~user/_site/
mydomain.com/~user/folder1 mydomain.com/~user/folder1  mydomain.com/~user/_site/folder1

我尝试了什么

RewriteEngine On
RewriteCond %{HTTP_HOST} ^mydomain\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/~user/_site/?
RewriteRule ^(.*)$ /~user/_site/$1


RewriteEngine On
RewriteCond %{HTTP_HOST} ^mydomain\.com$
RewriteRule !^~user/_site(.*)$ /~user/_site$1 [L]


RewriteEngine On
RewriteCond %{HTTP_HOST} ^mydomain\.com$
RewriteRule ^~user/_site(.*)$ /~user$1 [L,R=301]

RewriteCond %{HTTP_HOST} ^mydomain\.com$
RewriteRule !^~user/_site(.*)$ /~user/_site$1 [L]

然而,所有这些

  • 不要以栏中所需的隐藏网址结尾
  • 出错,因为服务器中不允许某些重定向

部分解决方案

在调整proposed solution之后,我能够确定一个部分有效的变体

RewriteEngine On
RewriteBase /~user
RewriteCond %{HTTP_HOST} ^(www\.)?mydomain\.com$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !^/_site/? [NC]
RewriteRule ^(.*)$ _site/$1 [L]

请注意,在最后两行中,我从正则表达式中删除了~user。这会重定向所有子文件夹和页面,并允许访问~user中的其他文件夹。

然而,"家庭" mydomain.com/~user是唯一未重定向的。如果它存在,RewriteCond %{REQUEST_FILENAME} !-d不允许对其进行处理。

RewriteCond %{HTTP_HOST} ^(www\.)?mydomain\.com$ [NC]
RewriteCond %{REQUEST_URI} ^/$ [NC]
RewriteRule ^/?$ _site/ [L]

要将主页(~user)重定向到mydomain/~user/_site,但它不起作用。并尝试了^/?$^$的变体形式。但他们也没有工作。

想法?

1 个答案:

答案 0 :(得分:1)

你应该这样试试。

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?mydomain\.com$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !^/~user/_site/? [NC]
RewriteRule ^~user/(.*)$ /~user/_site/$1 [L]