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

.htaccess Liferay:从所有社区网站中删除/web/,.htaccess,url-rewriting,liferay,virtualhost,liferay-6,.htaccess,Url Rewriting,Liferay,Virtualhost,Liferay 6,我似乎不知道如何重写url,以便从我的所有社区网站中删除/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

我似乎不知道如何重写url,以便从我的所有社区网站中删除/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提供的一个解决方案,它使用虚拟主机;但是,这只适用于该域的一个社区站点,但我需要该域与我正在创建的所有社区站点的域相同。

首先,您必须手动更改domain.com/web/community中的页面链接。。。至domain.com/community

之后,您需要一个重写规则将新url重写为旧url,而不通知用户:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !^web/
RewriteRule ^(.*)$ /web/$1 [L,QSA]
然后,在更改浏览器链接时,您需要一条规则将仍然访问旧url的用户重定向到新url:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} ^web/
RewriteRule ^web/(.*)$ /$1 [L,QSA,R=301]
然后你需要把它混在一起,但是如果你这样做,你会得到一个无限循环,所以你需要一些东西来避免它(我使用的一个技巧是在第一个规则中添加一个可选参数,并在第二个规则中检查它是否存在,如果它存在,那么你就不重定向):


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

proxyHtmlexOn
可代理的
设置输出过滤器充气;代理html;瘪下来

proxyHtmlURL映射^/web/(.*)$/$1 Rli

哎呀,我忘了liferay上的线程url;你在第一部分是什么意思。。。手动更改我的页面链接?我在假设,但我认为我的假设是错误的,你的意思是改变社区网站中每个页面的友好url?或者你的意思是在主域的站点页面中创建反映社区站点页面的页面?顺便说一句,我真的很感谢你的回复。非常感谢。我的意思是,例如,您有一个包含如下链接的页面home.html:
,您需要将其更改为
(这就是我的意思)哦,好的,谢谢。我在vhost文件中配置了这个,这个
RewriteBase/
破坏了我的apache…这很奇怪,我编辑了我的答案(删除了RewriteBase,但在rewriteRules中还添加了一个“/”),我现在得到了404个页面;有什么地方可以让你看我的虚拟主机配置吗?我认为这会引起一些重写问题。
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]