我的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网址可供访问。
如何修复此问题,并将一个文档根目录作为子目录,而没有重复内容/重定向到子目录中的多个域?
答案 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
。