【问题标题】:configure .htaccess to use a subfolder as root and mask the url配置 .htaccess 以使用子文件夹作为根并屏蔽 url
【发布时间】:2016-08-25 23:56:03
【问题描述】:

我在互联网上尝试了几种解决方案,但无法使重定向巫毒起作用。

设置

我的设置是使用 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 并在浏览器中查看该 URL,同时为 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]

然而,所有这些

  • 不要在栏中以所需的隐藏 URL 结尾
  • 给出一个错误,因为服务器中不允许某些重定向

部分解决方案

在调整 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,但它不起作用。并尝试了^/?$^$ 的变体。但它们也不起作用。

想法?

【问题讨论】:

    标签: .htaccess redirect mod-rewrite


    【解决方案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]
    

    【讨论】:

    • 您在尝试规则时从未真正说出您遇到了什么问题。您可能已打开索引。您需要在 .htaccess 文件的顶部使用它Options -Indexes
    • 问题是我无法删除_site,当我尝试时,我只是得到一个内部服务器错误。问题是服务器由第三方管理并共享。所以,我对配置没有太多控制权。我尝试添加该选项,但也出现内部错误。
    • 进一步测试表明,mydomain.com/~user 以外的链接实际上被重定向了。但是当我访问以前的地址时,我会得到目录列表。但是,出于某种原因,某些链接有效,而其他链接则无效。我看不到某些文件夹可以访问而其他文件夹不能访问的模式。
    猜你喜欢
    • 1970-01-01
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多