Sometimes the Apache rewrite engine is a pain to use and debug.

You can easily do the redirection from within config.php, near the top of it:

  if($UrlScheme == 'http')
Redirect($pagename, "https://www.yourwiki.net".$_SERVER['REQUEST_URI']);

I'd use "www.yourwiki.net" instead of $_SERVER["HTTP_HOST"] in order to redirect people who went to "yourwiki.net" to the host that has "www." in front (better for search engines to have a single hostname).



Depending on your audience it may not be suitable to redirect everyone to the HTTPS website.

I've recently worked with a large public organization with thousands of users that may use a wiki both with their own devices, and with the computers of the company that only have MSIE 6 to 8 as a web browser. Windows XP and other older operating systems do not support the new free "Let's Encrypt" certificates and users of these cannot open the secure wiki.

What I ended up doing is use JavaScript to perform the redirect, only for the browsers that are able to open the HTTPS connexion.

In your document root, place such a file named redirect-to-https.js:

  // Written by Petko Yotov (c) 2016 www.pmwiki.org/petko
  var currenthref = window.location.href + '';
  var newhref = currenthref.replace(/^http:/i, 'https:');
  if(currenthref != newhref) window.location.href = newhref;

In your config.php, place these lines instead of the ones I gave earlier:

  if ($UrlScheme == 'http') $HTMLHeaderFmt['redirect-to-https'] =
'<script type="text/javascript" src="https://www.yourwiki.net/redirect-to-https.js";></script>';

The JS file instructs the browser to replace the current unsafe connexion with the secure one.

The config.php code only includes the JS file in the HTML source if the protocol is "http".

If a browser opens an insecure page, it will try to load the JS file. If it is able to load it, that means it is able open the secure connexion and it gets immediately redirected.

If an older browser cannot open the secure connexion, it will be unable to load the JS file so it will ignore it and display the (insecure) page, as PmWiki will happily serve it. This is a lesser problem than a large group of the intended audience being unable to reach the wiki.

In case you have a modified $ScriptUrl variable, use $UrlScheme in it instead of "http" or "https":

 $ScriptUrl = "$UrlScheme://www.yourwiki.net/";

Petko


On 2017-02-14 16:21, [email protected] wrote:
It seems that there is an ongoing trend towards having our whole
websites reachable only through the https protocol.[1][2]
Thus, I am now in the (not so straightforward) process of switching
from http to https.

As far as I can understand, the whole process could be split in two parts:
1) Enabling https for the domain. - After this step the whole the
website is reachable through both ports 80 (HTTP) and 443 (HTTPS);
2) Forcing (all) the connections to use https, as opposed to plain http[3]

In my case, I am on a cheap shared hosting, with limited flexibility.
Nonetheless step 1 has been completed and I am now able to reach my
website with both http and https.
The second step seems now the trickiest.
I set these lines towards the top of my root .htaccess file,

    RewriteEngine On
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteCond %{HTTPS} off
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]

which seem[4] to take care of the thing. And indeed, as far as I can
see, all the http connections result now as https.
Nonetheless I have some issues, one of which is related to the
ShortUrl[5] recipe.
I have
    RedirectMatch ^/s(.*)$ /S/$1
just above the "RewriteEngine On" line, as well as
    $ShortUrlPrefix = 'https://example.com/s';
in config.it, but I keep on getting "This site can’t be reached" from
the browser whenever I type a short url in.
Alternatively, I get a message from Pmwiki: ShortUrl error: can't read code map.
And the url appears to change into something like
https://www.example.com/S/x (which did not happen before).

Reading on the web, it seems that many different things might create
issues in the http/https switch, from cookies to more esoteric
subtleties.
Does anybody know where the issue might be in this very case, please?

Thanks!

Luigi

--------
[1] "You should always protect all of your websites with HTTPS, even
if they don’t handle sensitive communications. Aside from providing
critical security and data integrity for both your websites and your
users' personal information, HTTPS is a requirement for many new
browser features..."
https://developers.google.com/web/fundamentals/security/encrypt-in-transit/why-https
[2] "There’s pretty broad agreement that HTTPS is the way forward for
the web..."
https://blog.mozilla.org/security/2015/04/30/deprecating-non-secure-http/
[3] I am adopting an .htaccess approach as opposed to suggestions
found at http://www.pmwiki.org/wiki/Cookbook/SwitchToSSLMode as I
would like to switch all the website to https:
[4]
http://stackoverflow.com/questions/26620670/apache-httpx-forwarded-proto-in-htaccess-is-causing-redirect-loop-in-dev-envir
[5] http://www.pmwiki.org/wiki/Cookbook/Bloge-ShortUrl running very
well since many years.

_______________________________________________
pmwiki-users mailing list
[email protected]
http://www.pmichaud.com/mailman/listinfo/pmwiki-users

Reply via email to