-1

我似乎无法弄清楚如何进行 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 的一个线程,解决方案是使用虚拟主机;但是,这仅适用于该域的社区站点之一,但我需要该域对于我正在做的所有社区站点都相同。

4

2 回答 2

0

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

之后,您需要一个重写规则来将新的 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]

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

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]
于 2012-09-14T14:13:05.627 回答
0

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

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

于 2012-09-20T20:25:49.103 回答