Apache 如果使用htaccess存在目录,则重定向到目录

Apache 如果使用htaccess存在目录,则重定向到目录,apache,.htaccess,Apache,.htaccess,我有大约250个public_html目录要移到/clients/中。由于原始URL(例如mysite.com/bob)已用于客户的印刷营销材料中,因此我需要保持其可访问性。我希望当有人访问mysite.com/bob(示例)时,htaccess检查mysite.com/agents/bob是否存在,如果存在,则重定向到它。到目前为止,我已经检查了这么多的帖子,并提出了这一点,但我正试图让它适用于任何名称场景 Options +FollowSymLinks RewriteEngine On E

我有大约250个public_html目录要移到/clients/中。由于原始URL(例如mysite.com/bob)已用于客户的印刷营销材料中,因此我需要保持其可访问性。我希望当有人访问mysite.com/bob(示例)时,htaccess检查mysite.com/agents/bob是否存在,如果存在,则重定向到它。到目前为止,我已经检查了这么多的帖子,并提出了这一点,但我正试图让它适用于任何名称场景

Options +FollowSymLinks
RewriteEngine On

ErrorDocument 404 /error_page.php

## check if path exists
## example: mysite.com/agents/bob

RewriteCond %{REQUEST_FILENAME} !-d

## if mysite.com/agents/bob exists, redirect mysite.com/bob 
## to mysite.com/agents/bob    

## The code below works - but just for bob. Want it to work for any name 
## e.g. mysite.com/tom, mysite.com/fred - to be redirected to 
## mysite.com/agents/tom, mysite.com/agents/fred respectively
## if mysite.com/agents/tom, mysite.com/agents/fred exist on the webserver

RewriteCond %{HTTP_HOST} ^mysite\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.mysite\.com$
RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteRule ^bob\/?$ "http\:\/\/mysite\.com\/agents\/bob" [R=301,L]

在代码处,替换最后一行:

RewriteRule ^(.+)\/?$ "http\:\/\/mysite\.com\/agents\/bob" [R=301,L]
为此:

RewriteCond %{REQUEST_URI} !/agents/
RewriteCond %{REQUEST_URI} !/error_page.php
RewriteRule ^(.+)\/?$     /agents/$1 [R=301,L]
因此,上面的代码将所有请求重定向到
/agents/
目录,并排除任何包含
/agents/
的请求,以避免循环,然后如果请求错误,错误页面将处理该请求,我也将从该规则中排除

如果您想先签入
/agents/
,然后在其他位置让我知道如何添加其他规则

清除浏览器缓存并测试它

更新:

请尝试以下方法:

RewriteCond %{REQUEST_URI} !/bob/agents/
RewriteRule ^bob/(.+)\/?$     /agents/bob/$1 [R=301,L]
更新2

RewriteCond %{THE_REQUEST} !/agents/
RewriteCond %{DOCUMENT_ROOT}/agents%{REQUEST_URI} -f
RewriteRule ^(.*)$    /agents%{REQUEST_URI} [L,R=301]
上面的代码将检查任何不包含
/agents/
的请求,即使是到
site.com/index
的请求,然后检查
/agents/
目录,如果该目录存在,则它将重定向到
/agents/
,否则将按原样处理


如果要排除
索引
请告诉我

您的更改已正确重定向到测试子目录:/agents/bob。然而,现在当我的主页mysite.com被加载时,css和js文件不再被加载。此外,如果我转到一个不存在的页面,比如mysite/noname,我会收到一个“mysite.com重定向您太多次”错误。它试图在mysite.com/agents/error_page.php中加载错误页面,而不是在mysite.com/error_page.php中加载错误页面。我用相同的结果清除了每个测试的缓存和cookie。@user2413654好的,您只想在agents/bob/right中签入包含bob的请求吗,如果向mysite.com/agentname发出请求-检查mysite.com/agents/agentname是否存在,如果存在,则重定向到mysite.com/agents/agentname。但我也有对其他静态目录的请求,这些目录不是仍然需要解析的代理名称。例如:mysite.com/other。那么,是否可以像上面那样首先检查,如果不存在,那么检查请求是否是一个目录,并允许解析它,如果不是,则直接到根目录中的错误页。好的,那么请求mysyite.com/whater,首先查看mysite.com/agents/whater,然后查看mysite.com/whater对吗?正确。然后,如果两个目录都不存在,则重定向到错误页面。