Twig generates too long URL resulting in a browser crash - apache

I've got a really weird issue.
I'm developping localy a portfolio based on Silex and Twig through a VM. At first I was accessing it like this: 192.168.56.2/pfsilex and everything was working fine.
I've created a vhost and the corresponding entry in my host file, and I still can access my website and navigate between pages, but after a few seconds on the page the browser just crash (tried with Chrome, FF and IE).
At first I thought it was some kind of script, so I disabled JavaScript. Nothing changed. After checking the error.log from Apache I had weird entries : "Request URI too long". Very weird indeed considering my URIs are really short.
The next thing to do has been to check the access.log, and yes, URIs are way too long:
192.168.56.1 - - [28/Jan/2013:22:37:40 +0100] "GET /[type:protected]%20=%3E%200%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20[lineno:protected]%20=%3E%201%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20[1]%20=%3E%20Twig_Token%20Object%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20(%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20[value:protected]%20=%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20[type:protected]%20=%3E%202%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20[lineno:protected]%20=%3E%207%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20[2]%20=%3E%20Twig_Token%20Object%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20(%20%20%20%20%20%20%20%20%20%20%20%20%20%20%" 414 540 "-" "-"
In this URI we can notice twice the parameter named "Twig_Token" which let me thing that's a Twig issue, but since it's totaly working without the virtual host I'm kinda lost.
I don't pass any get parameters to my views (at least it seems so but I'm new to Silex), only arguments when returning the template.
I don't think it comes directly from twig.
Here is my vhost :
<VirtualHost *:80>
ServerName portfolio.dev
DocumentRoot /var/www/pfsilex/
<Directory /var/www/pfsilex/>
Options -Indexes
AllowOverride All
Order Deny,Allow
Allow from All
</Directory>
</VirtualHost>
My .htaccess :
<ifModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
And my host :
192.168.56.2 portfolio.dev

It had nothing to do with Twig.
In fact I had a general route intercepting everything served on "/" in order to load pages from the DB.
But it means it was also intercepting every static file, and when this file was not present the method would throw a big stacktrace.
What was happening is that I hadn't any favicon.ico but every browser tries anyway to load it.
The Chrome network console doesn't show this resource loading, I was able to debug it using Firefox which show it.

Related

Rewriting URL with OHS/Apache as front with Portal running on Webcenter

We have our Portal running on Oracle Webcenter 11.1.1.8 and our WLS is fronted with OHS .
As we see , the URL to our portal page is formed as http://host:port/webcenter/portal/My-Custom-Portal/Home?.
As per out client's requirement , we are not supposed to show "webcenter/portal" in our URL along with the adf params .
What we want is URL should be clean as http://My-Custom-Portal/home and that's it.
Now,We are stuck with the URL re writing part as how to hide "webcenter/portal" . I tried editing httpd.conf file inside /config folder by adding this below rule just after where load module command for mod_rewrite.so ends.This below line of code was added as a test to see whether this works or not .
RewriteEngine on RewriteRule .* http://www.google.com
But sadly , this didn't help at all . All the request that here given to proxy host and port with webcenter were working as they were earliar .
Also read about .htaccess file that would hold the re writing rules and should be kept under the root directory . But we deploy our code as war to Weblogic , so where should the .htaccess file be kept , if at all that is needed.
What am I missing /doing wrong here .
Kind Regards,
Sid
EDIT : As jonathan suggested following changes were added in httpd.conf file
Virtual host entry:
NameVirtualHost *:7743
<VirtualHost *:7743>
ServerName 10.10.10.10
ServerAlias abc.abc.com
RewriteEngine On
RewriteOptions inherit
RewriteRule ^/mylife$ /webcenter/portal [P]
RewriteLog /tmp/rewrite.log
<Location /webcenter>
SetHandler weblogic-handler
WebLogicHost 10.10.10.10
WebLogicPort 8888
</Location>
</VirtualHost>
After hitting the url as http://10.10.10.10:7743/mylife
we are getting the URL as
http://10.10.10.10:7743/mylife;jsessionid=cMDQVLyJ1QH2GqXQgNgs9PPmTmcLLqw7Lt5ctT1dgLBsvDVcBh11!-2127183939?_afrLoop=1892903079007447
in the address bar
with the message in the window as
The requested URL /mylife;jsessionid=cMDQVLyJ1QH2GqXQgNgs9PPmTmcLLqw7Lt5ctT1dgLBsvDVcBh11!-2127183939 was not found.
Are there any more configurations that are needed ?
The feature you are looking for is generally known as pretty URLs. There are a few different ways to achieve this.
They usually include some combination of hiding ADF parameters and also proxying/rewriting URLs.
Here are a few other links:
http://www.tuckey.org/urlrewrite/
http://docs.oracle.com/cd/E29542_01/doc.1111/e27603/appx_urls.htm
http://webcenter-satishb.blogspot.com/2013/06/pretty-url-for-pages-in-webcenter.html
https://blogs.oracle.com/shay/entry/shorter_url_for_your_adf
https://blogs.oracle.com/jdevotnharvest/entry/pretty_url_in_adf_faces
How can i Use Tuckey URL Rewrite with ADF Essentials?
Also, I don't recommend using Google as an example of a proxy/rewrite. Use a lesser technologically savvy website. Google does some things to prevent users from proxying.
Try [R] instead of [p] at the end.

Unable to rewrite the URL from "login" to "login.php" using mod_rewrite

I have a server which hosts a few sites. On one site, I can use the rewrite engine through .htaccess like so:
RewriteEngine on
RewriteRule ^avy.png avy/avy.php
/avy.png works fine on the first site.
On the second site, however, I'm using rewrite engine in .htaccess like so:
RewriteEngine on
RewriteRule ^login login.php
And when visiting /login, it shows me a 404. /login.php works fine.
The two sites have virtually the same vhost config (only difference is ServerName). /login.php allows world to read it. Both sites are http only. I'm using CloudFlare for both sites. What could the issue be?
I found an error in the log... seems it only appeared just now.
Negotiation: discovered file(s) matching request: /srv/http/.../login (None could be negotiated)
I googled it, and apparently MultiViews was conflicting with my extension-less "login" string. Turned off multiviews and it works perfectly.

mod_rewrite doesnt work if file with same name as argument exists

I'm experiencing some issues with mod_rewrite in htaccess.
Let's for instance say I request example.com/foo/, it works perfectly if I don't have a file starting with "foo.*" in the root directory.
Let's say I have news.php, sitemape.xml, style.css in root, I can't use /news/ or /sitemap/ or /style/ , it will give a 404 like /news.php/ etc.
Here's my rewrite string. It works locally with my Apache 2.2.22 but not at my web-host with the same Apache version.
RewriteRule ^([A-Za-z0-9]+)/?$ index.php?category=$1 [NC,L]
Anyone has a clue?
This sounds like Multiviews rearing its ugly head when its not wanted. It may be that your host automatically turns on the Multiviews option by default, and mod_negotiation then tries to "guess" what the request is for, and if it's close enough (like with /news/ and /news.php), it will automatically serve it, and disregard whatever mod_rewrite rules you may have.
Try turning off multiviews. You can do this in your htaccess file using the Options directive (assuming your host has allowed Options):
Options -Multiviews

Serving a directory outside DocumentRoot with Apache

I want exampleapp.com/clientapp/ to execute the index.php in /usr/local/apache/htdocs/clientapp.
This stackoverflow question outlines something similar to what I want to do: https://stackoverflow.com/a/8454/173630
I'm having some trouble getting this working. Here's the start of my VirtualHost setup:
<VirtualHost exampleapp.com:80>
DocumentRoot /home/platform/src/serverapp/public
RewriteEngine On
Alias /clientapp/ "/usr/local/apache/htdocs/clientapp"
<Directory "/usr/local/apache/htdocs/clientapp">
FallbackResource index.php
<IfModule mod_suphp.c>
suPHP_UserGroup nobody nobody
</IfModule>
</Directory>
RewriteRule ^/clientapp/(.*)$ /clientapp/$1 [PT]
I'm using Apache 2.2.22. I know this is kind of a confusing setup -- the reason I'm doing this is to avoid cross-domain AJAX requests from clientapp to serverapp.
With this configuration I'm not getting any errors, it's just falling through to the server app.
Update
The problem was that I had a BasicAuth set up on /usr/local/apache/htdocs/clientapp, and the password wasn't being prompted for when visiting exampleapp.com/clientapp/ and it was just silently failing. I took off the BasicAuth for now, which gets it to work.
After trying a few things out, it looks like this is just mod_alias being retarded and either blindly mashing together file-path and URI-path or mistaking the file-path (/usr/local/apache/htdocs/clientapp) for a URI-path (not sure how). Either way, you can do one of two things, it looks like.
Add a trailing slash to your file-path:
Alias /clientapp/ "/usr/local/apache/htdocs/clientapp/"
Remove the trailing slash from your URI-path:
Alias /clientapp "/usr/local/apache/htdocs/clientapp"
Both seems to do the trick, but I would suggest doing the second option, as it would match requests for exampleapp.com/clientapp (no trailing slash), and mod_dir will properly recognize it as a directory and redirect you to exampleapp.com/clientapp/. Whereas if you go with first option, going to exampleapp.com/clientapp would just give you a 404 (or something in the document root ends up handling it).
Change <Directory ...>...</Directory> to <Location /clientapp>...</Location> and keep everything inside it.

Strange behavior change in mod_rewrite

In a .htaccess context, I have a simple rewriting rule :
RewriteEngine on
RewriteRule ^dir/([^/]+)/(.*) action/do.php?a=$1&b=$2 [L,QSA]
dir and action are in the same directory, which is also my DocumentRoot.
When accessing http://example.org/dir/a/b the request should (and was) rewritten to http://example.org/action/do.php?a=a&b=b without redirection or anything visible.
However since I upgraded from Apache 1.3 + mod_php to Apache 2.2 (mpm_worker) + PHP FastCGI (don't know how it's related, but it seems to be), the precedent rule returns a 404 error :
The requested URL /var/www/action/do.php was not found on this server.
The DocumentRoot is now inserted in the request ! The file /var/www/var/www/action/do.php obviously doesn't exist.
As a workaround, I changed the rule : (added a / at the beginning of the second part)
RewriteEngine on
RewriteRule ^dir/([^/]+)/(.*) /action/do.php?a=$1&b=$2 [L,QSA]
And it works (because fortunately in this case, I'm in the DocumentRoot directory).
Do you know what caused this behavior change ? Did you notice the same thing ?
Ok, I found what happened.
Actually, I was not in my DocumentRoot but in a VirtualDocumentRoot thanks to mod_vhost_alias.
The issue does not happen when using "real" virtual hosts.