Regex 重定向、代理和重写引擎
我的网站(Regex 重定向、代理和重写引擎,regex,apache,.htaccess,mod-rewrite,redirect,Regex,Apache,.htaccess,Mod Rewrite,Redirect,我的网站(www.example.com)有以下.htaccess文件: RewriteEngine on RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ RewriteRule ^/sub/(.*)$ http://sub.example.com/$1 [L,R=301] RewriteCond %{HTTP_HOST} ^sub\.example\.com$ RewriteCond %{REQUEST_URI} !^/sub/ Rewrit
www.example.com
)有以下.htaccess
文件:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$
RewriteRule ^/sub/(.*)$ http://sub.example.com/$1 [L,R=301]
RewriteCond %{HTTP_HOST} ^sub\.example\.com$
RewriteCond %{REQUEST_URI} !^/sub/
RewriteRule ^(.*)$ /sub/$1 [L]
文件夹结构与此类似:
/ root
| .htaccess
| index.php
| / sub
| | more.html
| | cats.jpeg
| | / folder
| | | index.php
.htaccess
文件应该做的是:
- 打开
时提供sub.example.com/cats.jpeg
(但不要重定向,充当代理)/sub/cats.jpeg
- 将(301)任何打开
的访问重定向到/sub/*
sub.example.com/*
转到sub.example.com/folder
sub.example.com/sub/folder/
按预期工作sub.example.com/folder/
为什么??你们能帮帮我吗?提供更好的解决方案?嗯,这是一个有点棘手的问题。我不得不重新创建这个目录结构来调查发生了什么 这实际上是由于
mod_dir
玩坏了的运动mod_dir
检测请求URI是否为目录,如果您的URI缺少一个,则添加一个尾随斜杠
您正在请求不带尾随斜杠的/文件夹
。您的重写规则将其重写到/sub/folder
,并且mod_dir
执行301
重定向到/sub/folder/
。显然,当您请求sub.example.com/folder/
时,mod_dir
不会做任何事情,因为它在重写的URI中已经有一个尾随斜杠sub.example.com/sub/folder/
要解决此问题,请使用如下规则:
RewriteEngine On
RewriteRule ^sub(/.*)?$ http://sub.example.com$1 [NE,NC,L,R=302]
# adds a trailing slash if rewritten URI is a directory
RewriteCond %{DOCUMENT_ROOT}/sub%{REQUEST_URI} -d
RewriteCond %{HTTP_HOST} ^sub\.example\.com$
RewriteRule ^((?!sub/).*)$ /sub/$1/ [L,NC]
# just rewrite to /sub/<uri>
RewriteCond %{HTTP_HOST} ^sub\.example\.com$
RewriteRule ^((?!sub/).*)$ /sub/$1 [L,NC]
重新编写引擎打开
重写规则^sub(/.*)$http://sub.example.com$1[NE,NC,L,R=302]
#如果重写的URI是目录,则添加尾部斜杠
重写cond%{DOCUMENT_ROOT}/sub%{REQUEST_URI}-d
重写cond%{HTTP_HOST}^sub\.example\.com$
重写规则^((?!sub/).*)$/sub/$1/[L,NC]
#只需重写到/sub/
重写cond%{HTTP_HOST}^sub\.example\.com$
重写规则^((?!sub/).*)$/sub/$1[L,NC]
感谢您的回答,遗憾的是,sub.example.com/folder
仍然会导致sub.example.com/sub/folder/
。这只在您的浏览器上有旧缓存。在新浏览器中测试。是的,忘记清除缓存了,谢谢你的帮助。还有,最后一件事,任何对sub.example.com/sub/folder/
的请求都会得到一个答案,有没有办法阻止?