将documentroot重定向到conf apache或.htccess中的另一个文件夹

将documentroot重定向到conf apache或.htccess中的另一个文件夹,apache,http,mod-rewrite,url-rewriting,Apache,Http,Mod Rewrite,Url Rewriting,你好 我想在请求子目录时重写url 当用户请求 172.0.0.1/url 我想重写以使此url指向 172.0.0.1/url/url 或者documentroot位于/var/www/html/url/url中,请指出 172.0.0.1/url 您可以使用.htaccess将/url重定向到/url/url 只需在/var/www/html/处创建.htaccess文件,其中包含以下内容: RewriteEngine on RewriteRule ^/?url/(.*)$ /url/url

你好

我想在请求子目录时重写url 当用户请求

172.0.0.1/url

我想重写以使此url指向

172.0.0.1/url/url

或者documentroot位于/var/www/html/url/url中,请指出

172.0.0.1/url


您可以使用
.htaccess
/url
重定向到
/url/url

只需在
/var/www/html/
处创建.htaccess文件,其中包含以下内容:

RewriteEngine on
RewriteRule ^/?url/(.*)$ /url/url/$1 [R,L]
这将重定向位于
/url
的所有传入请求,并将它们重定向到
/url/url


但您无法将来自
/url/url
的请求重定向到
/url
,因为我们已经在
/url
重定向请求,这将导致catch 22,浏览器将在
/url
/url/url
之间来回重定向。这里的技巧是避免创建重写和重定向循环。您可以将此代码放在根文件夹htaccess中

RewriteEngine On

# Redirect /url/url/xxx to /url/xxx
RewriteCond %{THE_REQUEST} \s/(url)/url/(.*)\s [NC]
RewriteRule ^ /%1/%2 [R=301,L]

# Internally rewrite back /url/xxx to /url/url/xxx
RewriteRule ^(url)/((?!url/).*)$ /$1/$1/$2 [L]

这里有两句话。首先,您的规则创建一个重定向循环。然后,实际上可以在没有循环的情况下同时在内部重写和重定向。更多细节请参见我的答案