How to serve .well-known on Heroku
Saturday, April 22nd, 2017 | Programming
If you want to use Apple Pay on your website, you need to serve a file from inside the .well-known
directory. This is a nightmare.
For a start, you can’t create a directory called .well-known
on Mac. So you have to find another solution. mod_rewrite
to the rescue perhaps? You may be able to get this working, but I couldn’t. I just got a 403 permission denied on Heroku.
client denied by server configuration: /app/public/.well-known
So I decided to try Alias
instead.
This was easy to configure on my localhost. I created a directory without the period and then used Alias
to map it.
Alias "/.well-known" "/Users/me/Projects/ProjectName/well-known"
To configure it in Heroku, I created a custom Apache configuration file.
Alias "/.well-known" "${HEROKU_APP_DIR}/well-known"
And then configured my Procfile
to load this.
web: vendor/bin/heroku-php-apache2 -C heroku-apache.conf public/
So far, so good. Except this didn’t work either because I had not given the directory permission in the Apache config. So I expanded my custom config file.
<Directory "${HEROKU_APP_DIR}/well-known">
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
This got it working. However, it took my homepage offline. It seems that when you include a custom Apache configuration file, it knocks out the standard DirectoryIndex
that Heroku has. Or, there is something else really obviously wrong that I am missing. That’s entirely possible, but I haven’t spotted it yet.
And I did manage to fix it by adding in a new DirectoryIndex
to my .htaccess
file.
DirectoryIndex index.php
Finally, you have Heroku serving the directory correctly.
If you want to use Apple Pay on your website, you need to serve a file from inside the .well-known
directory. This is a nightmare.
For a start, you can’t create a directory called .well-known
on Mac. So you have to find another solution. mod_rewrite
to the rescue perhaps? You may be able to get this working, but I couldn’t. I just got a 403 permission denied on Heroku.
client denied by server configuration: /app/public/.well-known
So I decided to try Alias
instead.
This was easy to configure on my localhost. I created a directory without the period and then used Alias
to map it.
Alias "/.well-known" "/Users/me/Projects/ProjectName/well-known"
To configure it in Heroku, I created a custom Apache configuration file.
Alias "/.well-known" "${HEROKU_APP_DIR}/well-known"
And then configured my Procfile
to load this.
web: vendor/bin/heroku-php-apache2 -C heroku-apache.conf public/
So far, so good. Except this didn’t work either because I had not given the directory permission in the Apache config. So I expanded my custom config file.
<Directory "${HEROKU_APP_DIR}/well-known"> Options FollowSymLinks AllowOverride All Require all granted </Directory>
This got it working. However, it took my homepage offline. It seems that when you include a custom Apache configuration file, it knocks out the standard DirectoryIndex
that Heroku has. Or, there is something else really obviously wrong that I am missing. That’s entirely possible, but I haven’t spotted it yet.
And I did manage to fix it by adding in a new DirectoryIndex
to my .htaccess
file.
DirectoryIndex index.php
Finally, you have Heroku serving the directory correctly.