Jump to content
sanjom

Let's Encrypt .htaccess Conditions

Recommended Posts

Hey, I've used ProcessWire for a while now but not made an appearance in the forum yet :D I just wanted to share the solution to a small problem I came across with Let's Encrypt (free SSL service).

Let's Encrypt SSL certificates need to be renewed every few months to remain active. My web host does this automatically but needs access to a folder named ".well-known", which ProcessWire blocks by default because it starts with a dot. This results in a 403 error.

To work around this, just add the following line to your .htaccess file, around line 150:

RewriteCond %{REQUEST_URI} !^(/\.well-known)

It should be the first condition in the section titled "Access Restrictions: Keep web users out of dirs that begin with a period".

I also ran into another problem. Let's Encrypt accesses mail.example.com which is redirected to www.mail.example.com because I enabled the redirection in my .htaccess fie. So we need to exclude the mail sub domain from that rule using the following line as the second condition in the www-redirection section (around line 160):

RewriteCond %{HTTP_HOST} !^mail\. [NC]

I know it's quite a specific problem but maybe it'll help someone Googling the issue.

I was curious, is there any way of redirecting to the www-version without having to exclude all your sub domains? The only way I can think of involves explicitly writing out your domain name in the .htaccess file and redirecting whenever the %{HTTP_HOST} starts with that name. But obviously that would lead to a loss of generality.

  • Like 5

Share this post


Link to post
Share on other sites

Hi,

6 hours ago, sanjom said:

It should be the first condition in the section titled "Access Restrictions: Keep web users out of dirs that begin with a period".

As far as I know, since ProcessWire 3.0.29 we have RewriteRule "(^|/)\.(?!well-known)" - [F] there by default. See: https://processwire.com/blog/posts/pw-3.0.29/#summary-of-added-pull-requests

 

 

  • Like 5

Share this post


Link to post
Share on other sites

I'm still having an issue with this. Both with my older PW sites and my newer 3.0+ sites. I can see the rule in the htaccess, but .well-known is still blocked. Any ideas?

Share this post


Link to post
Share on other sites

Have you checked permission of .well-known??

Gideon

Edit: Just found this:

RewriteRule "(^|/)\.(?!well-known)" - [F]

to  .htaccess to section 12.

Share this post


Link to post
Share on other sites

I have not been having this kind of problem since 3.0.29.  My issue is I have the htaccess file  forcing https and that breaks the renewal process.  Currently I rename the htaccess to something like htaccess1, then do the renewal manually then rename the htaccess file back to normal.  Anyone have a tip on how I can still use the automated way with https?   Sorry to hijack this thread.

Share this post


Link to post
Share on other sites

I am using acme.sh with the webroot validation mode and don't have an issue with https for renewal.  However, I put this in my .htaccess in case I ever have to start from scratch.

  RewriteCond %{HTTP:X-Forwarded-Proto} =http
  RewriteCond %{REQUEST_URI} "!(^|/)\.well-known"
  RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

The interesting bit is the 2nd line, which effectively says "to redirect from http to https, the URI cannot match .well-known or anything/.well-known".

In the PW-installed .htaccess this is the #9 block of directives that redirects from http to https, not the #12 block of access control restrictions. The sense of the comparison with ".well-known" here is different than in block #12.  Additionally, the exact format of the 1st line will depend on how your web server frontend/load-balancer is configured.  Alternatives involve %{HTTPS}, %{HTTP:X-Forwarded-SSL}, %{HTTP:Forwarded}, etc, and you should not change whatever is already working for you in the 1st line.

Share this post


Link to post
Share on other sites

I'm currently having this problem on siteground. Running multisite pw the .well-known directory and files are not created, let alone accessible. If I create the directories in the pw/ directory and try accessing them directly I can browse to them, but if I use one of the multisite domains it will not find the directory in pw/ - should it be looking somewhere else? Do I need to alter the base directory for each multisite? They are currently all pointing at the pw/ directory.

Thanks!

Share this post


Link to post
Share on other sites
5 hours ago, gornycreative said:

If I create the directories in the pw/ directory and try accessing them directly I can browse to them, but if I use one of the multisite domains it will not find the directory in pw/ - should it be looking somewhere else? Do I need to alter the base directory for each multisite? They are currently all pointing at the pw/ directory.

There are different possible approaches, but this should work:

  • create a subdirectory in your web root for every domain, named exactly like the domain
  • make sure ownership is correct
  • add a rewrite rule in .htaccess before #12 that prepends the requested host name to the path:
  RewriteCond %{REQUEST_URI} ^/?\.well-known
  RewriteRule "(^|/)(.*)$" $1%{HTTP_HOST}/$2 [L]

  • start letsencrypt with webroot option pointing to /path/to/pw/domain-in-question for every domain
  • enjoy

 

  • Like 1

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By ce90
      Hello everyone,
      hopefully this is the right place to ask and is not a duplicate question.
      I'm pretty new to processwire, so... if this question is kind of funny for some of you, you're welcome 😄 
      I have the following issue and can't find anything understandable about it. Maybe I'm searching the wrong way, but anyways.. here is my question:

      How is it possible to rewrite the URLs, that I'll get a *.php ending?
      Example:
      https://www.mysite.de/urlsegment/ -> https://www.mysite.de/urlsegment.php
      https://www.mysite.de/urlsegment/urlsegment/ -> https://www.mysite.de/urlsegment/urlsegment.php
      Because I've read a lot about "Why do you wanna do this or have that?" – here my answer for that in advance:
      I've built a processwire installation inside or around an existing website. Therefore, we want to keep the existing *.php Google entries. Sure, we could redirect via 301 Redirect, but would prefer to keep the *.php ending.
      If you have further questions, please do not hesitate to ask.
      Thank you in advance for your help.

      Best regards
      ce90
    • By Orkun
      Hi Guys
      How can I make a redirect inside the .htaccess to my custom maintenance.html file when any URL of my Website is accessed except the processwire admin (www.example.com/processwire/).
      Because I want that my User's still can access the website when they are loggedin in Processwire.
      When the current url starts with /processwire or if there is a processwire-login-cookie (Is there a cookie when user is logged in Processwire?) available the redirect should not work. Otherwise it should work.
      How can I achieve this?
    • By neophron
      Hi there,
      a few weeks ago I completed a 3.098 installation (server php 7.2). Yesterday I wanted to login but failed. I tried different browsers, meanwhile on two different PCs, but no login.
      Then I realized, that after hitting the »Login« button, there was no message (admin name – Login failed). I also tried all procedures (https://processwire-recipes.com/recipes/resetting-admin-password-via-api/). Then I checked the errors.txt (site/assets/logs) – nothing.
      The frontend works fine. Is there a way to check this Processwire installation? Could be something missing?
       
    • By Jennifer Stock
      Greetings. I would like to restrict access to certain sections of my organization's ProcessWire site using pubcookie. We are rolling out Shibboleth authentication later this year but for now, it seems I can only make use of our institution's single sign-on routine by utilizing rules in an .htaccess file. 
      I am wondering if there is a way to ask PW to apply these rules to certain pages in the site, whether via template type or location in the page tree:
      AuthType UWNetID PubcookieAppID "MyApplication" require type staff faculty  
    • By dweeda
      I installed an SSL Certificate, then edited my .htaccess file:
        # -----------------------------------------------------------------------------------------------
        # 9. If you only want to allow HTTPS, uncomment the RewriteCond and RewriteRule lines below.
        # -----------------------------------------------------------------------------------------------
        RewriteCond %{HTTPS} off
        RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
      by uncommenting out the Rewrite lines.
      Now I get 404 error pages when I try go to any .../processwire-master/<pagename>/
      This includes my admin page at .../processwire-master/processwire/, so i can't get into my admin.
      What else do I need to do?
×
×
  • Create New...