I've been struggling with this issue for hours today myself and after reading multiple threads on this board (all vaguely related), I finally just started messing with my Apache settings.
For full disclosure, I'm running on my development machine: Windows Vista (eek), Apache 2.2, Joomla 1.5.
Everything was working fantastically well...then I set "Search Engine Friendly URLs" and "Use Apache mod_rewrite" to Yes and things went downhill rapidly (pear-shaped, as my British friends would say).
I could see my frontpage but every other link resulted in a 404 error.
As far as I can tell, the following things eventually led to success. Much of this was written by others on this forum (thank you all for sharing!). First, the .htacess file:
* Ensure file is called ".htaccess" and not "htaccess.txt"
* File needs to be in the root Joomla directory (could be the root of the webserver or not...in my case, joomla was in a subdirectory and that was where the .htaccess file needed to be)
* I commented out this line: "Options +FollowSymLinks"
* I uncommented out the "RewriteBase /"
* Since I had installed Joomla in a subdirectory, I changed the RewriteBase line to include my subdirectory like so... RewriteBase /subdirectory_name/
* Unlike a few suggestions around, I did not add any AddHandler lines to the file
For sake of clarity, here is the full contents of my .htaccess file:
Code:
##
# @version $Id: htaccess.txt 10492 2008-07-02 06:38:28Z ircmaxell $
# @package Joomla
# @copyright Copyright (C) 2005 - 2008 Open Source Matters. All rights reserved.
# @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
# Joomla! is Free Software
##
#####################################################
# READ THIS COMPLETELY IF YOU CHOOSE TO USE THIS FILE
#
# The line just below this section: 'Options +FollowSymLinks' may cause problems
# with some server configurations. It is required for use of mod_rewrite, but may already
# be set by your server administrator in a way that dissallows changing it in
# your .htaccess file. If using it causes your server to error out, comment it out (add # to
# beginning of line), reload your site in your browser and test your sef url's. If they work,
# it has been set by your server administrator and you do not need it set here.
#
#####################################################
## Can be commented out if causes errors, see notes above.
# Options +FollowSymLinks
#
# mod_rewrite in use
RewriteEngine On
########## Begin - Rewrite rules to block out some common exploits
## If you experience problems on your site block out the operations listed below
## This attempts to block the most common type of exploit `attempts` to Joomla!
#
# Block out any script trying to set a mosConfig value through the URL
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]
# Block out any script trying to base64_encode crap to send via URL
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR]
# Block out any script that includes a <script> tag in URL
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
# Block out any script trying to set a PHP GLOBALS variable via URL
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
# Block out any script trying to modify a _REQUEST variable via URL
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
# Send all blocked request to homepage with 403 Forbidden error!
RewriteRule ^(.*)$ index.php [F,L]
#
########## End - Rewrite rules to block out some common exploits
# Uncomment following line if your webserver's URL
# is not directly related to physical file paths.
# Update Your Joomla! Directory (just / for root)
RewriteBase /subdirectory_name/
########## Begin - Joomla! core SEF Section
#
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{REQUEST_URI} (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$ [NC]
RewriteRule (.*) index.php
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
#
########## End - Joomla! core SEF Section
But now the tricky part (for me anyway), I had to jump into my Apache configuration file, httpd.conf. The file can be found in the "conf" directory off your apache directory. By default, it seems like my settings would not allow the .htaccess files directives to override the default apache settings. That sentence was easy to type just now...but took me a few hours to figure out (I'm not an Apache pro).
In order to allow the .htaccess file to work, I added the following section:
Code:
<Directory "C:/Apache/htdocs/subdirectory_name">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.2/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride FileInfo
#
# Controls who can get stuff from this server.
#
Order allow,deny
Allow from all
</Directory>
That code was put directly beneath the <Directory "C:/Apache/htdocs"></Directory> node.
The trick seemed to be that "AllowOverride FileInfo" line. And be sure to replace "subdirectory_name" in my code above with your subdirectory name.
I hope this further clarification to others work will help folks out.
Regards,
Mike R.