Common problems when enabling Search Engine Friendly (SEF) URLs
From Joomla! Documentation
Enabling Search Engine Friendly (SEF) URLs can cause problems if your website hosting is not properly configured to support the re-writing of URLs. There are many combinations of server technologies and operating systems, so it is not possible to give definitive answers to every problem with SEF URLs, however some of the more common problems are listed below.
Is Your Server Running Apache?
When you enable SEF URLS in Joomla! there is an option to re-write the URLs without /index.php/ which requires mod_rewrite (or the IIS equivalent). If your server is not running Apache, or does not have the ability to rewrite URLs in this way, you will come across error messages with this option enabled. Try setting this option to no and see if this method of re-writing works for you.
Also make sure that you have a Directory section in your Apache config file that allows .htaccess overrides, otherwise the .htaccess file in your Joomla! root directory will be ignored. The directive needed is:
Is Your Server Running IIS?
If you are using IIS check out these links which may be useful:
Did You Clear Your Cache?
When you make any changes to SEF settings make sure that you clear your cache. If you are caching URLS (for example, using a third-party SEF extension), make sure that you change any settings there, and purge cached URLs.
Have You Moved Domains?
Sometimes if you have changed domains (for example, from a localhost or test environment to the live domain), you will need to edit the value for the $live_site variable in the configuration.php file found in the root directory of your Joomla site files. The value of the variable must be manually edited, it cannot be accessed via the Global Configuration screens.
Typically, it would look like:
var $live_site = 'https://example.com';
Or, if you access your website in a sub-folder called joomla, it would be like this:
var $live_site = 'https://example.com/joomla';
When you move domains, this value may need updating to reflect your new domain name:
var $live_site = 'https://mynewdomain.com';
Often there is no need to specify this variable at all. Simply leave it blank:
var $live_site = '';