具有一个文档根

时间:2017-10-05 00:15:53

标签: apache .htaccess web webserver

我的Hoster允许多个网站,但只有一个DocumentRoot适用于所有域。

我想要的是具有不同内容的网站:

https://www.site1.com
https://www.site2.com

我有什么:

Directory Structure
/html/ <- Document root
/html/site1.com/ <- Symlink to /pages/site1.com/web
/html/site2.com/ <- Symlink to /pages/site2.com/web

它应该如何运作:

Browser: https://www.site1.com/folder/ 
<- this will internally gets internally redirected to /pages/site1.com/web/folder/

目前的.htaccess解决方案:

RewriteCond %{REQUEST_URI} !^/site1.com/.*$
RewriteCond %{HTTP_HOST} ^site1.com$ [NC]
RewriteRule ^(.*)$ /site1.com/$1 [L,NC]

如果我访问https://www.site1.com/folder/,它正在运作。

但问题是,我不想要的:

1。)如果我访问site1.com/folder(没有最后一个斜杠),网络服务器会自动重定向到https://www.site1.com/site1.com/folder/而不是https://www.site1.com/folder/。 我认为这是由于Apache(具有有限ssh帐户的Shared Web Hoster)目录的自动尾随斜杠功能。 一种可能的解决方案是将所有网络浏览器https:// 网站 / 网站文件夹 .com /请求uri重定向到非/site1.com/请求URI&#39;第 但是我测试的每个htaccess规则都失败了

2。)我不想制作http://www.site1.com/site1.com&amp;由于内容重复,https://www.site1.com/site2.com网址可​​供访问。

如何修复此问题,并将一个文档根目录作为子目录,而没有重复内容/重定向到子目录中的多个域?

1 个答案:

答案 0 :(得分:0)

这不能用3行完成,所以这就是我要做的事情:

RewriteEngine On

# First we check if we have a direct access to our folder and prevent it with a 404 Error
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_URI} ^/?site1\.com(/.*)?$ [NC]
RewriteCond %{REQUEST_URI} ^/?site2\.com(/.*)?$ [NC]
RewriteRule ^.*$ - [R=404,L]

# Optional you can redirect all non-www to www, http or https stay the same
RewriteCond %{HTTP_HOST} !^www\.(.+)$ [NC]
RewriteRule ^/?(.*)$ %{REQUEST_SCHEME}://www.%1/$1 [R=301,L]

# Now we rewriting all request based on the requesting host works with www and non-www
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^/?(.*)$ /%1/$1 [L]

答案假设该文件夹与主机相同但没有前导www.,正如您在问题中所说的那样。因此,对于http://www.example.com,文件夹必须为example.com