Liferay:从所有社区网站中删除/ web /

时间:2012-09-14 13:56:27

标签: .htaccess url-rewriting liferay virtualhost liferay-6

我似乎无法弄清楚如何进行网址重写,以便我可以从所有社区网站中删除/ web /:

domain.com/web/communitysite1/page
domain.com/web/communitysite2/page
domain.com/web/communitysite3/page
domain.com/web/communitysite4/page

我想要它,

domain.com/communitysite1/page
domain.com/communitysite2/page
domain.com/communitysite3/page
domain.com/communitysite4/page

这是来自Liferay的thread,使用虚拟主机的解决方案;但是,这仅适用于该域名的社区站点之一,但我需要域名对于我正在进行的所有社区站点都是相同的。

2 个答案:

答案 0 :(得分:0)

首先,您必须手动将您的网页链接从domain.com/web/community更改为domain.com/community

之后,您需要重写规则,在不通知用户的情况下将新网址重写为旧网址:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !^web/
RewriteRule ^(.*)$ /web/$1 [L,QSA]

然后,您需要一条规则,在更改浏览器链接时,将仍旧访问旧网址的用户重定向到新网址:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} ^web/
RewriteRule ^web/(.*)$ /$1 [L,QSA,R=301]

然后你需要把它混合起来,但是,如果你这样做,你会得到一个无限循环,所以你需要一些东西来避免这种情况(我使用的一个技巧是添加一个可选参数给第一个规则并检查第二个规则是否存在,如果确实存在,那么你不重定向):

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} ^web/
RewriteCond %{QUERY_STRING} !(.*&)?r=0(&.*)?$
RewriteRule ^web/(.*)$ /$1 [L,QSA,R=301]

RewriteCond %{REQUEST_FILENAME} !^web/
RewriteRule ^(.*)$ /web/$1?r=0 [L,QSA]

答案 1 :(得分:0)

感谢@Yazmat的帮助。 @Prakash K这是我目前使用的,它是使用代理模式的不同解决方案。

ProxyHTMLExtended On ProxyHTMLEnable On SetOutputFilter INFLATE;proxy-html;DEFLATE ProxyHTMLURLMap ^/web/(.*)$ /$1 Rli