You would usually use Apache rewrite to assign a more friendly URL for APEX app. I have these config that has been working great for me.
This work for apex flash chart too
UPDATE as at 13 August 2012
Apparently for apex flash chart, it is NOT gonna work. You are gonna hit the Flash Security Error. I am still trying to find the solution.
<VirtualHost *:80> ServerName finance-app.mydomain.com ServerAlias finance-app RewriteEngine On RewriteRule ^/$ http://oracle01:7777/pls/apex/f?p=134 [L,P] RewriteCond %{QUERY_STRING} ^(.*)oracle01:7777.*flash(.*)$ RewriteRule ^/(.*) /$1?%1finance-app/apex_util.flash%2 [L,R] RewriteRule ^/i/(.*) http://oracle01:7777/i/$1 [L,P] RewriteRule ^/c/(.*) http://oracle01:7777/c/$1 [L,P] RewriteRule ^/data/(.*) http://oracle01:7777/data/$1 [L,P] RewriteCond %{QUERY_STRING} ^p=\d+:101$ RewriteRule ^/ http://finance-app/ [L=310] RewriteRule ^/(.*) http://oracle01:7777/pls/apex/$1 [L,P] ErrorLog /var/log/finance-app-error_log TransferLog /var/log/finance-app-access_log RewriteLog /var/log/finance-app-rewite_log </VirtualHost>
finance-app is the name of my application, which I want to access it using http://finance-app
oracle01 is my oracle http server that’s hosting oracle APEX
The URL http://oracle01:7777/pls/apex , /i/, and /c/, and /data/ will depend on your dads.conf file under your oracle http server.
Here is the content of my dads.conf
Alias /i/ "/oracle/product/APEX/apex_default_images/" Alias /c/ "/oracle/product/APEX/apex_custom_files/" Alias /data/ "/oracle/product/APEX/AppData/" AddType text/xml xbl AddType text/x-component htc <Location /pls/apex> Order deny,allow PlsqlDocumentPath docs AllowOverride None PlsqlDocumentProcedure wwv_flow_file_mgr.process_download PlsqlDatabaseConnectString oracledb.mydomain.com:1521:APEXDB ServiceNameFormat PlsqlNLSLanguage AMERICAN_AMERICA.AL32UTF8 PlsqlAuthenticationMode Basic SetHandler pls_handler PlsqlDocumentTablename wwv_flow_file_objects$ PlsqlDatabaseUsername APEX_PUBLIC_USER PlsqlDefaultPage apex PlsqlDatabasePassword apexpubuser Allow from all </Location>
I hope this posting helps whoever needed a friendlier URL for APEX app.
I will give it a try this weekend and tell you how it went, Thank you very much!
PD: Does it work with the flash charts in the end or not?
Hi Aldo,
I haven’t been able to get this to work with flash chart. You’ll get the Flash Security Error.
The solution for this is to put cross-domain policy file in the root directory of your http server.
You can see the detail here http://www.anychart.com/products/anychart/docs/users-guide/index.html
Expand the “Implementation” and click on “Security Error”.
I could have swore that this work before, my best assumption is that it’s stopped working when we upgraded to Apex 4. It may be due to the newer version of AnyChart engine for apex 4 has a tighter security policy.
Thank you for reading my blog! Let me know if you have other question.
-Yoel
Thank God we are not using the Charts on this application. But I guess its good to know the way to fix it.
Right now I am trying to make it work on our app….
Ok, It is not working for me at all….
So, After I finished with the VirtualHost Configuration, I ended up with something like this:
ServerName myapp.mydomain.com
ServerAlias myapp_alias
RewriteEngine On
RewriteRule ^/$ http://www.mydomain.com:7777/pls/apex/f?p=104 [L,P]
RewriteCond %{QUERY_STRING} ^(.*)www.mydomain.com:7777.*flash(.*)$
RewriteRule ^/(.*) /$1?%1myapp_alias/apex_util.flash%2 [L,R]
RewriteRule ^/i/(.*) http://www.mydomain.com:7777/i/$1 [L,P]
RewriteCond %{QUERY_STRING} ^p=\d+:101$
RewriteRule ^/ http://myapp_alias/ [L=310]
RewriteRule ^/(.*) http://www.mydomain.com:7777/pls/apex/$1 [L,P]
ErrorLog /var/log/myapp_alias-error_log
TransferLog /var/log/myapp_alias-access_log
RewriteLog /var/log/myapp_alias-rewite_log
(I did not add the /c/ and /data/ cause my dads.conf did not contain these values)
I tried to go on my application by using http://myapp_allias.com … but it did not work… the only way to access it is by http://www.mydomain.com/7777/pls/apex/f?p=104
What might be the problem?
Is this solution supposed to work just for intranets? or it also works for “public” apps….? (mine is a public one)
I hope you can help me out with this situation.
Thank you
Aldo
HI Aldo,
What do you get when you ping myapp_alias?
It needs to point to the ip address of the server which you use to perform rewrite.
I think the configuration should work for public app as well.
Thanks Yoel,
Let me give it a shot and I will post the results…
I can ping the myapp_alias… I get the normal response (it’s up and working)
However, even if I can get a normal response from the ping… the only way to access the app is by using the full address…. it does not work if I just use the just the myapp_alias on the address bar
PS: I also tried this one
ServerName http://www.myhost.com
ServerAlias http://www.myhost.com
RewriteEngine On
RewriteRule ^/$ /pls/apex/f?p=136:1 [R=301]
When you said full address, do you mean http://myapp_alias:7777//pls/apex/f?p=104?
If that works, it looks like you are configuring your virtual host in the same machine as your OHS.
Can you confirm this?
If that’s the case, you need to assign your OHS to listen to port 80 as well beside 7777
Because when you type http://myapp_alias in the browser, it will send the request to port 80. If your OHS is not listening to port 80, you’ll get an error. What error did you get btw?
My configuration is different, I am using a different server to server the virtual host:
1. I have my OHS running together with my database in server oracle01. My OHS is listening on port 7777
2. I have apache running on different machine for the virtual host. This apache is listening on port 80
3. I have my URL ‘finance-app’ pointing to the apache server (#2) not to my OHS (#1)
4. So when I type in http://finance-app, the request will go to server #2 and then redirected to server #1.
WIth my setup, if I ping ‘finance-app’ i’ll get ip address of server #2, not my OHS (server #1).
Let me know. Thanks Aldo!
Tres bien… That was the problem… I was doing everything on one server, not 2 different servers…
But still… no solution for my problem. I will keep working on it during the week, I will let you know if I figure out something.
Its kind of frustrating… specially cause the OTN people always tell me “That has nothing to do with apex…” But apex doesnt offer an Out-Of-The-Box Solution for this…
Anyway… I will keep working on this
Thanks Yoel!
Aldo, it can still be done with the same server.
1. You need to make your OHS listen to port 80 as well. You can update the httpd.conf file to do that.
Restart OHS after editing the file. You can check whether the server is listening to port 80 by entering
http://servername:80 in your browser
2. Let say you store your virtual host config file in /etc/apache2/vhost/myapp.conf,
You need to set OHS to read your virtual host config file by adding this line
“Include /etc/apache2/vhost/myapp.conf” (without the double quote) into your httpd.conf
Restart OHS and test the rewrite rule.
Hopefully this helps.
Got it, I will give it a try in the morning (we have almost 12 hours of difference)
Thanks for your help!
not a problem dude. Good night 🙂
Im frustrated already… Ive changed everything but it is still not working… I double checked that the server was actually listening to the port 80…
But its like, it’s just not considering the virtualhost configuration at all…
Just asking, where is your httpd.cong located at?…. Maybe I am configuring the wrong one?
I am just flipping out here hahaahah
Thanks for your help
Ok youre not gonna beleive this… The firewall was blocking the port 80 Hahahahahah!!!
Its all working now
Thank you so much for your help Yoel, you rock!
Aldo
Woohooo….awesome man! I am glad that it finally works for you! You are most welcome!
Hi Yoel,
Everythink work fine … Well almost everythink except logout from Apex 😉 When i try logout from app the browsers says:
Not Found
The requested URL /pls/apex/pls/apex/f was not found.
Do you have the same behaviour in your app?
Error log and rewrite log nothing catch…
Just access log:
[09/Oct/2012:17:41:46 +0200] “GET /apex_authentication.logout?p_app_id=105&p_session_id=4758237370201 HTTP/1.1” 302 –
[09/Oct/2012:17:41:46 +0200] “GET /wwv_flow_custom_auth_std.logout?p_this_flow=105&p_next_flow_page_sess=105:1 HTTP/1.1″$
[09/Oct/2012:17:41:46 +0200] “GET /pls/apex/f?p=105:1 HTTP/1.1” 404 202
[09/Oct/2012:17:41:46 +0200] “GET /favicon.ico HTTP/1.1” 404 203
Hi Filip,
Looks like your logout page is not set to 101 (the login screen).
Go to “Shared Component” –> “Authentication Schemes” and edit your current scheme.
Make sure the “Logout URL” go to page 101
Mine looks like the following
wwv_flow_custom_auth_std.logout?p_this_flow=&APP_ID.&p_next_flow_page_sess=&APP_ID.:101
Hello,
Thanks for sharing your knowledge. I have no idea about Apache. Is there a way to rewrite the URL with Glassfish server ?
Regards,
Hi Fateh,
Thank you for reading my blog.
Unfortunately I am not familiar with Glassfish server and I think Glassfish is application server instead of web server like apache, so I am not sure if that’s possible.
Setting up apache for the rewrite is a breeze, once installed you don’t need to change any of the default parameter to get the rewrite to work.
You only have to make sure the apache read your application conf file you created.
Hope this helps!
cheers
Hi Yoel
Can you please help me set this up for https (port 443). It works well with http (port 80).
Thanks
Hi PVC,
I have not tried doing this using https protocol before and I am in a tight project deadline now.
Can I get back to you once I figure it out?
Thanks.