【发布时间】: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