我的项目有一个指向两个独立网站的启动页面。这些站点托管在同一台服务器上,它们应位于不同的文件夹中,以便更好地进行维护。
文件夹结构应该是这样的:
/home/user1234/public_html
/splash/
index.html
css/
images/
...
/site1/
index.php
css/
images/
...
/site2/
index.php
css/
images/
...
主站点(site1和site2,可能是两个Wordpress安装)必须可以在url结构的子目录下访问,而不是子域!所以url结构应该是:
www.MySite.tld --> Splash
www.MySite.tld/site1 --> Site1
www.MySite.tld/site2 --> Site2
现在我必须将这些网址与服务器上的相应目录相匹配。但我不知道该怎么做。 我不得不说它是一个共享托管服务器,所以我只能使用htaccess和mod_rewrite来实现这一点,对吗?
因此,在webhost的管理界面中,我将www.MySite.tld指向/ splash文件夹。然后我将.htaccess放在该文件夹中并将请求重写到“虚拟文件夹”/ site1和/ site2,如下所示:
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/(site1|site2)/?$ [NC]
RewriteRule ^(.*)$ /home/user1234/public_html/%1 [L]
这不起作用,因为据我所知,只能使用mod_rewrite重写当前DOCUMENT_ROOT(/ splash)之外的文件。所以我试着将www.MySite.tld指向/ public_html而不是/ splash。现在对/ site1和/ site2的请求确实有效,但是请求/默认返回404,因为在那里没有索引文件,你可以在上面的文件夹结构中看到。所以我也将.htaccess放在/ public_html中,并遵循以下规则:
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/?$ [NC]
RewriteRule ^(.*)$ /splash [L]
现在启动页面是可访问的,但是在URL的末尾附加了一个“/ splash”,我不想要它!
我一直在寻找一个解决方案好几个小时,并尝试了我到目前为止找到的许多建议,但这些都没有解决我的问题。我尝试的最后一件事是设置一些virtual host with mod_rewrite,但我也无法让它工作。可能我还没有用mod_rewrite和所有其他apache的东西确认不够。 ; - )
或者我可能缺少一些基本的东西,比如设置一个正确的RewriteBase ...这个url +文件夹结构只能用mod_rewrite完成吗?如果是,我必须设置哪些重写规则?如果没有,我可以使用任何替代品吗?任何帮助将不胜感激。
答案 0 :(得分:1)
使用mod_rewrite可以轻松完成此操作。根据您概述的URL结构,使用以下.htaccess:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/(site1|site2|splash)/ [NC]
RewriteRule ^(.*) splash/$1 [L,PT]
RewriteCond
将避免在请求site1或site2时重写,并且还可以防止对/splash
的请求进行无限循环(这对.htaccess实现尤其重要)。
如果RewriteCond
匹配(即请求不适用于三个路径中的任何一个),RewriteRule
将与所有网址^(.*)
匹配,并重写为splash/$1
。选项L,PT
定义这应该是L|last
规则(在VirtualHost上下文中很有用,并不总是在.htaccess中工作)并且请求应该PT|passthrough
到后端(在此例如,Apache,没有向客户端浏览器发送重定向(30x)标头。