Apache 如何在不更改URL的情况下使用.htaccess将子域重定向到subdir

Apache 如何在不更改URL的情况下使用.htaccess将子域重定向到subdir,apache,.htaccess,mod-rewrite,url-redirection,Apache,.htaccess,Mod Rewrite,Url Redirection,这里有一个域/子域example.com/www.example.com(显然它们都指向/public\u html),放在这个目录中的网站运行得非常好。我已经创建了subdir/public\uhtml/wwwnew,以及subdomainwwwnew.example.com。我希望此子域指向此子文件夹,但不希望更改用户键入的URL(wwnew.example.com)。当然,我需要使用.htaccess 我当前的.htaccess文件: RewriteEngine On RewriteCo

这里有一个域/子域
example.com
/
www.example.com
(显然它们都指向
/public\u html
),放在这个目录中的网站运行得非常好。我已经创建了subdir
/public\uhtml/wwwnew
,以及subdomain
wwwnew.example.com
。我希望此子域指向此子文件夹,但不希望更改用户键入的URL(
wwnew.example.com
)。当然,我需要使用
.htaccess

我当前的
.htaccess
文件:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^(wwwnew.)?example.com$
RewriteRule ^(/)?$ wwwnew [L]

RewriteBase /
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*) index.php [L]
当前,当我键入
wwwnew.example.com
URL时,URL更改为
wwwnew.example.com/wwwnew
。我想让这个
/wwwnew
消失

有什么帮助吗

如果
wwwnew
是一个物理子目录(您说它是),那么您应该在
RewriteRule
子目录(最好是索引文档)的末尾附加一个尾随斜杠。如果不这样做,mod_dir将为您添加斜杠(以便“修复”URL),并在这样做时触发外部301重定向(您似乎看到了)。虽然这将是一个重定向到
wwwnew.example.com/wwwnew/
(带有尾随斜杠),但不是如您在问题中所述的
wwwnew.example.com/wwwnew

但是,您的条件会重写对apex域和子域的请求。在您的描述中,您只描述了从子域重写,而不是从apex域(您在其中有另一个站点)重写

因此,请尝试以下方法:

RewriteCond %{HTTP_HOST} ^wwwnew\.example\.com
RewriteRule ^$ wwwnew/ [L]
RewriteCond %{HTTP_HOST} ^wwwnew\.example\.com
RewriteRule !^wwwnew/ wwwnew/index.php [L]
.htaccess
中不需要
(/)?
。不过,最好是直接重写到要处理此请求的文档(即索引文档)(否则mod_dir必须为您执行此操作)。例如:

RewriteRule ^$ wwwnew/index.php [L]
您需要清除浏览器缓存,因为错误的重定向到
/wwwnew
将被浏览器缓存

更新:

但是,上面只重写对裸子域的请求,没有任何URL路径(如问题中所述)。为了将此子域的任何请求(例如,
wwwnew.example.com/
)重写到子目录,您需要执行以下操作:

RewriteCond %{HTTP_HOST} ^wwwnew\.example\.com
RewriteRule ^$ wwwnew/ [L]
RewriteCond %{HTTP_HOST} ^wwwnew\.example\.com
RewriteRule !^wwwnew/ wwwnew/index.php [L]

这确保了我们不会得到重写循环。

“当然我需要使用
.htaccess
”-为什么?您没有访问服务器配置的权限吗?非常感谢!你的规则奏效了。然而,我已经提出了基于WrodPress的解决方案。您曾经问过“请求wwwnew.example.com/something会发生什么情况”,我猜这将由WordPress生成。所以所有的请求都应该没有/wwwnew…你能帮忙吗?老实说,我是网络管理员,被要求准备这个子文件夹和子域。创建我们新网站的家伙要求的。我没有访问apache的权限。这是外部托管提供商。顾问告诉我,操纵htaccess是唯一的方法。如果此答案对您有效,请将其标记为已接受,以将其从未回答的问题队列中删除,您还可以对您认为有用的答案进行投票。谢谢,非常感谢:)