max length of url 257 characters for mod_rewrite?

My url scheme is /foo/var1-var2-var3.../bar

I am using these mod_rewrite rules:

RewriteBase /foo/
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^ index.php [PT,L]

If the length of the string 'var1-var2...' is greater than 257 characters then an error 403 Forbidden and a 404 are returned. However, if the length of the 'var1-var2...' string is 257 characters or less and subsequently followed by a slash the length of the remaining url may be any length. How does one overcome this limit?


You are running into a limitation of the underlying file system.

Take a look at File System Limits. You will see that most have a Maximum filename length of 255 bytes. Thus, when apache and/or your rewrite rule checks if the file exists an error is returned to apache by the operating system.

With Apache, if you put rules such as this in the .htaccess file, it's too late to work around the problem. Apache will have already attempted to stat the long filename thus throwing the file system error '(36)File name too long', returning a 403 error.

I see two options:

  1. Change the URL format of your application to a max of 255 characters between each slash.
  2. Move the Rewrite rules into the apache virtual host config and remove the REQUEST_FILENAME.