We recently moved an old PHP Project from a server using httpd to our regular production servers running Apache2. In this project we have some rewrite rules that map requests either to our index.php
file or if they are files they are supposed to be mapped into the public directory where static assets lie.
# Map request to index.php if the file was not found
# ---------------------------------------------------------------------------------------------
RewriteRule ^([a-z0-9\-/]*)$ public/index.php?morrow_path_info=$1&morrow_basehref_depth=1 [L,QSA,NC]
# Map all requests to the public subfolder (also features public folder)
# ---------------------------------------------------------------------------------------------
RewriteCond %{REQUEST_URI} !-f
RewriteRule features/(.+)/public/(.+) app/features/$1/public/$2 [L,QSA]
RewriteCond %{REQUEST_URI} !public
RewriteRule ^(.+)$ public/$1 [L,QSA]
These are all the rewrite rules in the .htaccess
file and they are working fine for CSS, Images and the like, but all our JavaScript just passes through and hits 404s.
I already tried debugging by enabling logging for the reroute module and for JS files it spits out for example:
[rewrite:trace2] mod_rewrite.c(476): [sub.example.de/sid#7f7d14046cb8] init rewrite engine with requested uri /javascript/bootstrap-datepicker.js, referer: https://sub.example.de/login
[rewrite:trace3] mod_rewrite.c(476): [sub.example.de/sid#7f7d14046cb8] applying pattern '^(.*)$' to uri '/javascript/bootstrap-datepicker.js', referer: https://sub.example.de/login
[rewrite:trace1] mod_rewrite.c(476): [sub.example.de/sid#7f7d14046cb8] pass through /javascript/bootstrap-datepicker.j , referer: https://sub.example.de/login
For CSS and Image Files meanwhile it does more work:
[rewrite:trace2] mod_rewrite.c(476): [sub.example.de/sid#7f7d14046cb8] init rewrite engine with requested uri /public/fonts/fontawesome-webfont.woff2, referer: https://sub.example.de/css/font-awesome.min.css
[rewrite:trace3] mod_rewrite.c(476): [sub.example.de/sid#7f7d14046cb8] applying pattern '^(.*)$' to uri '/public/fonts/fontawesome-webfont.woff2', referer: https://sub.example.de/css/font-awesome.min.css
[rewrite:trace1] mod_rewrite.c(476): [sub.example.de/sid#7f7d14046cb8] pass through /public/fonts/fontawesome-webfont.woff2, referer: https://sub.example.de/css/font-awesome.min.css
[rewrite:trace3] mod_rewrite.c(476): [sub.example.de/sid#7f7d14046cb8] [perdir /var/www/git/sub.example.de/] strip per-dir prefix: /var/www/git/sub.example.de/public/fonts/fontawesome-webfont.woff2 -> public/fonts/fontawesome-webfont.woff2, referer: https://sub.example.de/css/font-awesome.min.css
[rewrite:trace3] mod_rewrite.c(476): [sub.example.de/sid#7f7d14046cb8] [perdir /var/www/git/sub.example.de/] applying pattern '^([a-z0-9\\-/]*)$' to uri 'public/fonts/fontawesome-webfont.woff2', referer: https://sub.example.de/css/font-awesome.min.css
[rewrite:trace3] mod_rewrite.c(476): [sub.example.de/sid#7f7d14046cb8] [perdir /var/www/git/sub.example.de/] strip per-dir prefix: /var/www/git/sub.example.de/public/fonts/fontawesome-webfont.woff2 -> public/fonts/fontawesome-webfont.woff2, referer: https://sub.example.de/css/font-awesome.min.css
[rewrite:trace3] mod_rewrite.c(476): [sub.example.de/sid#7f7d14046cb8] [perdir /var/www/git/sub.example.de/] applying pattern 'features/(.+)/public/(.+)' to uri 'public/fonts/fontawesome-webfont.woff2', referer: https://sub.example.de/css/font-awesome.min.css
[rewrite:trace3] mod_rewrite.c(476): [sub.example.de/sid#7f7d14046cb8] [perdir /var/www/git/sub.example.de/] strip per-dir prefix: /var/www/git/sub.example.de/public/fonts/fontawesome-webfont.woff2 -> public/fonts/fontawesome-webfont.woff2, referer: https://sub.example.de/css/font-awesome.min.css
[rewrite:trace3] mod_rewrite.c(476): [sub.example.de/sid#7f7d14046cb8] [perdir /var/www/git/sub.example.de/] applying pattern '^(.+)$' to uri 'public/fonts/fontawesome-webfont.woff2', referer: https://sub.example.de/css/font-awesome.min.css
[rewrite:trace1] mod_rewrite.c(476): [sub.example.de/sid#7f7d14046cb8] [perdir /var/www/git/sub.example.de/] pass through /var/www/git/sub.example.de/public/fonts/fontawesome-webfont.woff2, referer: https://sub.example.de/css/font-awesome.min.css
So it seems like for JavaScript files once they fail the first condition (as they should) it just skips the rest of the rules. The VHost Configuration for this domain also has nothing beside DocRoot, ErrorLog Locations, SSL and the usual:
RewriteEngine On
<Directory /var/www/git/sub.example.de/>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
I have since found out that the 1 Rewrite that applied to .js
files was actually global. So .js
files still completely ignore the .htaccess
file in it's entirety, just spitting pass through
into the rewrite log.
[rewrite:trace2] mod_rewrite.c(476): [sub.example.de/sid#7f7d13fd2cb8] init rewrite engine with requested uri /javascript/jquery-1.11.1.min.js
[rewrite:trace1] mod_rewrite.c(476): [sub.example.de/sid#7f7d13fd2cb8] pass through /javascript/jquery-1.11.1.min.js
/public
prefix? Do you have any other.htaccess
files? Perhaps in the/javascript
subdirectory?