Get friendly urls to work in Liferay

liferay, portlet, url

Solution

Your route should start with the part after `content` as `content` is already part of the generated URL. The value `<friendly-url-mapping>content</friendly-url-mapping>` is used for that.

<route>
    <pattern>/{contentid}</pattern>
</route>

Also, be sure to change the DTD to the latest one in your `*-url-routes.xml`.

<!DOCTYPE routes PUBLIC "-//Liferay//DTD Friendly URL Routes 6.1.0//EN" "http://www.liferay.com/dtd/liferay-friendly-url-routes_6_1_0.dtd">

Problem

I wanted to enable friendly urls in liferay for my JSR-268 Portlets. I configured the friendly url mapper as I was told in http://www.liferay.com/web/guest/community/wiki/-/wiki/Main/FriendlyURLMapper but somehow this does not work for me. What am I missing? My `liferay-portlet.xml` looks like this: ``` <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE liferay-portlet-app PUBLIC "-//Liferay//DTD Portlet Application 6.1.0//EN" "http://www.liferay.com/dtd/liferay-portlet-app_6_1_0.dtd"> <liferay-portlet-app> <portlet> <portlet-name>content</portlet-name> <friendly-url-mapper-class>com.liferay.portal.kernel.portlet.DefaultFriendlyURLMapper</friendly-url-mapper-class> <friendly-url-mapping>content</friendly-url-mapping> <friendly-url-routes>com/gentics/cr/portlet/content-url-routes.xml</friendly-url-routes> <instanceable>true</instanceable> </portlet> <portlet> <portlet-name>navigation</portlet-name> <icon>/icon.png</icon> <instanceable>true</instanceable> </portlet> <portlet> <portlet-name>search</portlet-name> <icon>/icon.png</icon> <instanceable>true</instanceable> <!-- header-portlet-css>/css/test.css</header-portlet-css> <footer-portlet-javascript>/js/test.js</footer-portlet-javascript--> </portlet> <!--role-mapper> <role-name>administrator</role-name> <role-link>Administrator</role-link> </role-mapper> <role-mapper> <role-name>guest</role-name> <role-link>Guest</role-link> </role-mapper> <role-mapper> <role-name>power-user</role-name> <role-link>Power User</role-link> </role-mapper> <role-mapper> <role-name>user</role-name> <role-link>User</role-link> </role-mapper--> </liferay-portlet-app> ``` My `content-url-routes.xml` looks like this: ``` <?xml version="1.0"?> <!DOCTYPE routes PUBLIC "-//Liferay//DTD Friendly URL Routes 6.0.0//EN" "http://www.liferay.com/dtd/liferay-friendly-url-routes_6_0_0.dtd"> <routes> <route> <pattern>/content/{contentid}</pattern> </route> <!-- route> <pattern>/{instanceId}/search/{filter}</pattern> <implicit-parameter name="do">search</implicit-parameter> </route> <route> <pattern>/{instanceId}/search/{filter}/{start}</pattern> <implicit-parameter name="do">search</implicit-parameter> </route--> </routes> ``` The urls rendered in the portlet is still: `http://localhost:8080/web/guest/home?p_auth=Yu81QQrj&p_p_id=content_WAR_genticsportlet_INSTANCE_R2HSaoL5RkHi&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-2&p_p_col_count=1&_content_WAR_genticsportlet_INSTANCE_R2HSaoL5RkHi_contentid=10007.33` The URL was created using the follogwing code: ``` PortletURL actionURL = response.createActionURL(); actionURL.setParameter("contentid", "10007.33"); ``` It would be very nice if you could point me into the right direction...

Original source