Can Symfony 4 be configured to ignore code installed in subdirectories?

Tags: , , ,



I’m currently converting an old website to use Symfony 4 and the site uses the LiveZilla live chat app.

LiveZilla lives in a subfolder of the site, and is accessed directly using URLs under somesite.com/livezilla. I can’t currently access it of course, because I haven’t configured a route for this folder. So Symfony decides that this will be a 404.

LiveZilla is essentially a completely separate app living in its own folder here. It isn’t dependent on the website hosting it. Is there a way to tell Symfony to ignore certain paths so that code like this can be executed without interference?

I have a sneaking feeling that I need to adjust the way I am looking at this as I can’t find anything obvious in the Symfony docs about this, and the framework is pretty well thought out. The best I have come up with so far is hacking public/.htaccess, but it feels wrong somehow…

Answer

Your .htaccess file should allow requests directly to existing files, but not directories. See this rule:

# If the requested filename exists, simply serve it.
# We only want to let Apache serve files and not directories.
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

This means you should be able to access somesite.com/livezilla/index.php but a request to somesite.com/livezilla will redirect to the symfony front controller. So try changing your links to point to actual files within the sub-directory.

There is also nothing wrong with editing the .htaccess file to suit your needs. You just need a condition that checks if the request is to the sub-directory and if so use the same RewriteRule ^ - [L] as above to allow that request to continue.

The following should work if placed after the above rule (reference):

RewriteCond %{REQUEST_URI} ^/livezilla/ 
RewriteRule ^ - [L]

Or this may be better, place this rule immediately after the line RewriteEngine On(reference)

RewriteRule ^(livezilla) - [L]

The [L] flag means the rule will be the last one used for the request.



Source: stackoverflow