How to Redirect HTTP to HTTPS Using .htaccess File

With the emphasis on sites being hosted using https rather than http there’s also the redirect of the old website references, to the new encrypted https.

The .htaccess file in the root of the the web site supports the use of redirect rules.

Using htaccess file’s the Rewrite Condition and Rewrite Rule pairing we’ll redirect the http website pages to their corresponding https encrypted version.

Let’s start with the simple redirection.

We’ll begin by redirecting the non encrypted page to the encrypted website. For now we’ll ignore the finer point of serving up the same page.

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP-HOST} [R,L]

In the above example I’ve assumed that redirects don’t already exist. So I’ve added the first action to turn on the rewrites.

This is followed by the condition which we are testing for and the rule to be applied if the match is successful.

In the above we are testing to see if the page is encrypted using https. If not then replace the current URL with the server host name.

The rule, as shown, has 3 parameters: the string to match; the replacement string and some flags for the web server.

In this example

  • (.*)  – take all of the characters in the URL
  • %{HTTP-HOST} is the old website server host server name.
  • [R,L] The R tells the web server (Apache) this is a temporary redirect. Whilst the L to stop any further processing if the rule matches.

Now to take this a step further.

Clearly, entering a page which you have visited before, only to find that you are viewing the root of the website, will not be conducive to a happy website audience. Your visitor won’t care so much that it’s encrypted. It will also affect your website rankings and listings.

Let’s add the extra part to maintain our viewed page.

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

Now when the old page is visited it redirects to the encrypted one.

The final improvement is to tell the browser and search engine robots that this change is permanent by setting the value of R to 301.

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

or

The last part of the line details the type of redirect.

  • 301 is a permanent redirect. change the simple R flag to R=301.
  • 302 is temporary.

It can be very difficult to force a browser to revert after setting a permanent redirect. For this reason it’s best to use a temporary one whilst testing.

Do not duplicate RewriteEngine On.

I’ve seen .htaccess files with a RewriteEngine Off. Make sure your redirect rule isn’t outside of these two tags.

But if when testing your redirect is found not to be working check that it’s within an active RewriteEngine section.

If you have more than one redirect rule in what order in the sequence should this https redirect rule be placed?

Put your https redirect early in your list of redirects.

It’s efficient to handle the specific rules early on. Every rule that is tested is additional server processing giving rise to a slower server and a slower site response. Clear and precise rules should be listed first.

Export Lotus Notes Contacts

I was working recently with someone who wished to export their Lotus Notes contacts for use with either a Gmail or Apple account.

These are the steps I followed to export the contacts from Lotus Notes:

  1. Open the Contacts page in Lotus Notes.
  2. In the menu select My Contacts
  3. From the menu bar select More and then export
  4. Choose the save location and enter a file name
  5. Choose whether to export as a csv file or a vcard

Your contacts can now be imported into Gmail, iCloud or other applications.

You may find that saving the file as a vcard is more universal. Allowing for easier import some of the contacts.

ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)

On a new Linux installation I was getting an error when logging into MySQL using

mysql -u Username -p

The error was shown as:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

A silly error to encounter. I found that MySQL server was not installed.

Having rebuilt the computer with a replacement hard drive numerous packages had been installed.

Installing PHPMyAdmin there were errors connecting to MySQL leading to the discovery that I was yet to install MySQL.

I installed MySQL using the command:

apt-get install mysql-server

With MySQL installed PHPMyAdmin worked and all was well. The Can’t connect to MySQL server error was resolved.

Create ISO Disk Image From Files

From a set of files on a computer I wanted to create an ISO disk image.

The ISO image, which I had, required some changes to a configuration file before could make user of it.

Having downloaded an ISO disk image, I wished to extract the files, edit one of the configuration files and to then save the set of files once more as an ISO disk image.

Extracting ISO Image

To extract the ISO image to a set of files I used Ark. Ark is able to manage a number of archive formats, including CD-ROM images.

I converted the downloaded ISO DVD image to a set of files, by right clicking on the image and selecting to extract.

After editing the option files, which needed changing, of the DVD installation I recreated the DVD.

Create DVD Iso-Image from Files

I chose to use genisoimage to create the ISO disk image from the edited files.

To create an ISO image from files within a directory is just as simple.

State an output directory and name of the ISO to create, along with a source directory. For example:old command was to use mkisofs

genisoimage -o /home/neil/example.iso /home/directory/

Save DVD as Files

Whilst investigating the option to extract the ISO image and to subsequently recreate it I found commentary regards extracting the files from a physical DVD/CD-ROM.

The command dd can be used for this.

Open a terminal window and type the following at the command line.

dd if=/dev/cdrom of=/directory/example.iso

The above command has the following arguments:

  • dd is the program used to convert and copy a file
  • if defines the name and location of the input file
  • of defines the name and location of the output file

References

genisoimage Debian package reference

genisoimage Debian man page

dd command line utility.

MythWeb Sub-Pages File not Found

Following a recent update to Apache I found that when I navigated from the MythWeb main page to one of the sub-pages, for example, to the television listings

http://192.168.0.1/mythweb/tv/list

I was seeing an empty page with the simple message:

File not found.

I drew the conclusion that because the main page was functioning the issue was related to the Apache rewrite rules and the handling of the querystring parameters for pages.

Looking the mythtv directory structure these directories and pages are missing implying that it is achieved by query string.

I was using an old configuration with a simple reference within the file:

/etc/apache2/sites-available/000-default.conf.

As a part of my changes I removed the directory reference to mythweb within this file and copied the file /etc/mythtv/mythweb.conf across to the directory/etc/apache2/sites-available.

To enable the use of the mythweb.conf file I issued the command

a2ensite mythweb

This first step didn’t resolve the file not found error.

Looking in the file /etc/apache2/sites-available/mythweb.conf

# If MythWeb is installed outside of the document root (eg. using Alias) then
# you will need to set this directive to the base URL that MythWeb is visible
# from externally.  If you do not, the web server will return 'not found'.
RewriteBase    /mythweb

# Skip out early if we've already been through rewrites,
# or if this is a /css/, /js/ or /cache/ directory request.
RewriteRule    ^(css|data|images|js|themes|skins|README|INSTALL|[a-z_]+\.(php|pl))(/|$)     -     [L]

# Redirect /pl/ requests to the perl cgi handler.
RewriteRule     ^(pl(/.*)?)$            mythweb.pl/$1               [QSA,L]

# Redirect most of the remaining URL requests to the main mythweb script.
# It will then handle any requests given to it.
RewriteRule     ^(.+)$                  mythweb.php/$1              [QSA,L]

# If you're experiencing trouble with the previous two lines in your copy of
# apache, you could instead use something like:
#RewriteRule     ^(pl(/.*)?)$           mythweb.pl?PATH_INFO=/$1    [L,QSA]
#RewriteRule     ^(.+)$                 mythweb.php?PATH_INFO=/$1   [L,QSA]

# Catch anything else that comes through and send it to mythweb.php with no parameters.
RewriteRule     ^(.*)$                  mythweb.php                 [QSA,L]It has the section suggesting that the default rewrite rules may not work under some circumstances.

To correct the issue I commented the two lines.

RewriteRule     ^(pl(/.*)?)$            mythweb.pl/$1               [QSA,L]
RewriteRule     ^(.+)$                  mythweb.php/$1              [QSA,L]

and uncommented the two lines

RewriteRule     ^(pl(/.*)?)$           mythweb.pl?PATH_INFO=/$1    [L,QSA]
RewriteRule     ^(.+)$                 mythweb.php?PATH_INFO=/$1   [L,QSA]

to give:

# If MythWeb is installed outside of the document root (eg. using Alias) then
# you will need to set this directive to the base URL that MythWeb is visible
# from externally.  If you do not, the web server will return 'not found'.
RewriteBase    /mythweb

# Skip out early if we've already been through rewrites,
# or if this is a /css/, /js/ or /cache/ directory request.
RewriteRule    ^(css|data|images|js|themes|skins|README|INSTALL|[a-z_]+\.(php|pl))(/|$)     -     [L]

# Redirect /pl/ requests to the perl cgi handler.
#RewriteRule     ^(pl(/.*)?)$            mythweb.pl/$1               [QSA,L]

# Redirect most of the remaining URL requests to the main mythweb script.
# It will then handle any requests given to it.
#RewriteRule     ^(.+)$                  mythweb.php/$1              [QSA,L]

# If you're experiencing trouble with the previous two lines in your copy of
# apache, you could instead use something like:
RewriteRule     ^(pl(/.*)?)$           mythweb.pl?PATH_INFO=/$1    [L,QSA]
RewriteRule     ^(.+)$                 mythweb.php?PATH_INFO=/$1   [L,QSA]

# Catch anything else that comes through and send it to mythweb.php with no parameters.
RewriteRule     ^(.*)$                  mythweb.php                 [QSA,L]

I saved the above file and restarted Apache using

service apache2 reload

Following the change to the file mythweb.conf and the restart of Apache I was once more able to navigate around the MythWeb sub pages.

KDE Add Extract in Right Click Context Menu

How to add the missing Extract option to the KDE right click context menu.

Looking at a recent Debian installation with KDE the right click on a zip file didn’t show the extract here option

KDE Dolphin right click context menu without extract

The above image shows the pop-up context menu when right clicking on the zip file.

As can be seen in the above image there is no option to extract the contents of the zip file.

I chose to install the packages zip and unzip

apt-get install zip unzip

But there was no change in the context menu

With the addition of the ark archive utility package

apt-get install ark

The context sensitive right click option to uncompress a zip file was then shown

KDE Dolphin right click context menu with extract

As can be seen in the image above, following the addition of ark, the right click context menu now shows the Extract option.

Installing Epson Printer Drivers in Linux

Replacing an old printer with a shiny new Epson printer I was looking for the Linux print drivers.

In the past, adding an old printer I found the drivers already available within the printer configuration.

Prior to buying the printer I had made some research, reading about drivers available from the Epson website. To be sure had I checked that Epson provide Linux print drivers on their website.

With the new printer connected I opened the system settings printer configuration in KDE. Working thorough the manufacturer and subsequently the list of models, my new one wasn’t listed.

Often the necessary support is included without taking further action.

As a newer model I found this time that the printer model was not listed as an option.

This time to use the printer I would require the drivers either from the Epson website or the Debian repositories.

Drivers can be downloaded on the Epson website by selecting the operating system and printer:

http://download.ebz.epson.net/dsc/search/01/search/?OSC=LX

I downloaded the following printer drivers:

  • iscan-bundle-1.0.0.x64.deb.tar.gz
  • epson-inkjet-printer-escpr_1.6.2-1lsb3.2_amd64.deb
  • epson-printer-utility_1.0.0-1lsb3.2_amd64.deb

Navigating to the downloads directory I used dpkg to install each package.

First to be installed was iscan.

Iscan is downloaded as a compressed package. This I first extracted:

gunzip iscan-bundle-1.0.0.x64.deb.tar.gz

I was then able to install using dpkg:

dpkg -i iscan-bundle-1.0.0.x64.deb

Next the installation of the print drivers:

dpkg -i epson*.deb

But i encountered a dependency problem:

Package lsb is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'lsb' has no installation candidate

Apparently Debian is no longer supporting lsb, see this news item Debian dropping the Linux Standard Base

Further searching showed that there existed a package in the Debian repository epson-inkjet-printer-escpr.

An easy install:

apt-get install epson-inkjet-printer-escpr

The printer was now found and configured.

On another computer I found that the package was printer-driver-escpr

Interested to compare iscan with xsane I tried starting the program, but it requires the other Epson drivers to function.

KDE4 Plasma Move Panel Between Monitors

I was looking for a solution to move a KDE panel between monitors.

Whilst testing SDDM I swapped my primary monitors. At the end of the test I swapped back as before. But whilst I was able to reassign the primary monitor and the main panel with the Kicker etc. the top panel remained on the secondary monitor.

My panel, with its shortcuts, at the top of the screen was on the wrong monitor. It was at the top of the secondary monitor.

As an established panel with a numerous links and widgets I didn’t want to recreate it on the primary screen.

Besides, I was sure that it could be moved either through a configuration file or through the settings.

How to move a panel from the top of one screen to the other screen?

I right clicked on the panel and chose to view the settings. These are shown as an expanded row below the panel.

KDE4 Plasma Panel Settings

The image above shows the expanded settings for the panel.

To move the panel click on the Screen Edge button with the left mouse button. Then proceed to drag the panel to where you wish, even across two monitors.

Once done close the settings.

Possible missing firmware /lib/firmware/rtl_nic/rtl8168d-1.fw for module r8169

Completing a new Linux installation there may be additional firmware support to include.

To include the non-free firmware I had amended the package repository file (/etc/apt/sources.list)  to include the non-free elements

deb http://mirror.ox.ac.uk/debian/ testing main contrib non-free
deb-src http://mirror.ox.ac.uk/debian/ testing main contrib non-free

On a new Debian installation after all the general updates and installations I had installed the non-free firmware package.

apt-get install linux-firmware-nonfree

This installation included the message:

Possible missing firmware /lib/firmware/rtl_nic/rtl8168d-1.fw for module r8169

I noted that this error message was similar to that of the Realtek failed to load rtlwifi/rtl18723b article.

To resolve this message I subsequently added the Realtek firmware with the command

apt-get install firmware-realtek

To finish this step of the installation I once more ran

apt-get update

 

 

firmware: failed to load rtlwifi/rtl18723b

A new installation of Debian on a recent laptop purchase gave the not unexpected missing firmware error messages.

On completing the installation of Debian I was seeing the error:

firmware: failed to load rtlwifi/rtl18723b

I considered whether this may be resolved by installing the package firmware-linux-nonfree.

But decided to check whether there may be a more specific Realtek package available.

Searching apt for the required package

apt-cache search rtl18723b

Gave the response:

firmware-realtek – binary firmware for Realtek wired and wireless network adaptors

To install this additional Realtek firmware:

apt-get install firmware-realtek

Having installed the missing Realtek firmware the reported error massage was cleared.

Notes

Ensure that within the file /etc/apt/sources.list your repository setting includes non-free:

deb http://mirror.ox.ac.uk/debian testing main contrib non-free
deb-src http://mirror.ox.ac.uk/debian testing main contrib non-free

If you have just added this parameter perform an update apt-get update before continuing.

I also observed CPU timeouts caused by wpa_supplicant. This was also resolved by the installation of the rtl18723b firmware.