将多个域名重定向到子文件夹并从 URL 中隐藏子文件夹

将多个域名重定向到子文件夹并从 URL 中隐藏子文件夹

我已经在同一个 IP 和同一个文档根目录上与 Apache 建立了两个虚拟主机,因为我想在文档根目录中使用共享文件和内容。

我希望我的第二个网站指向文档根目录的子文件夹

http://example.com Loads http://example.com/subfolder

我尝试了 .htaccess 中的各种重写规则,它们都可以重定向,但会保留 URL 中的子文件夹,我不喜欢这样,我的意思是 URL 将是

 http://example.com/subfolder

虽然我想要

 http://example.com

这些都是我尝试过的

RewriteCond %{HTTP_HOST} ^(www.)?example.com$   
RedirectMatch ^/$ http://example.com/subfolder

或者

RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(.*)$ /subfolder/$1 [L]

第二个也出现 500 内部服务器错误,我该怎么办?

答案1

您要做的不是进行重定向,而是使用 RewriteRule 重写查询。因此它应该是这样的:

RewriteCond %{HTTP_HOST} ^(www.)?example1.com$   
RewriteRule !^subfolder1/ subfolder1%{REQUEST_URI} [L]
RewriteCond %{HTTP_HOST} ^(www.)?example2.com$   
RewriteRule !^subfolder2/ subfolder2%{REQUEST_URI} [L]

例如查询http://www.example1.com/foo.htmlApache 将把它当作查询来处理http://www.example1.com/subfolder1/foo.html。更改此查询中的域,文件将从子文件夹 2 提供。

在测试我的解决方案时,我还发现了这个,与您的问题非常相似:
由于可能的配置错误,请求超出了 10 次内部重定向的限制。?

答案2

“重定向”一词的意思是您的服务器告诉浏览器去获取另一个页面,而不是它所请求的页面。当浏览器执行此操作时,它还会更新位置栏中的路径。

为了隐藏新位置,您需要使用mod_rewrite。这是一个模块,它将查看服务器请求的内容并将其转换到服务器上的不同位置,而无需发出重定向。

答案3

我该如何制作这些 SSL?我正在使用这个……

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^(www.)?domainone.com$
RewriteRule ^(?!domainone/)(.*)$ /domainone/$1

RewriteCond %{HTTP_HOST} ^(www.)?domaintwo.com$
RewriteRule ^(?!domaintwo/)(.*)$ /domaintwo/$1

RewriteCond %{HTTP_HOST} ^(www.)?domainthree.com$
RewriteRule ^(?!domainthree/)(.*)$ /domainthree/$1

相关内容