简体   繁体   中英

apache mod_rewrite not working with .htaccess file

OK, I've been having some issues with aws or something, such that I cannot seem to get mod_rewrite to work.

Just for testing purposes I've done the following:

1 used aws console to deploy fresh ami 64 bit instance from wizard

2 yum installed apache

3 edited /etc/httpd/conf/httpd.conf: so that

<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>

looks like

<Directory />
    Options FollowSymLinks
    AllowOverride All
</Directory>

4 made sure that

LoadModule rewrite_module modules/mod_rewrite.so

is in the file and uncommented.

5 restarted apache:

 sudo /sbin/service httpd restart

6 created two new files:

/var/www/html/test1.html

contains:

this is test1!

/var/www/html/test2.html

contains:

this is test2!

7 created file:

/var/www/html/.htaccess

contains (IN TOTAL):

RewriteEngine on
RewriteRule ^test1\.html$ test2.html [L]

8 went to:

http://[my aws server]/test1.html

Am getting "this is test1!"

I am doing something wrong here, but for the life of me I have no idea what. Any help is greatly appreciated...

EDIT: I added nonsense chars/numbers to the beginning of my .htaccess file, and restarted apache (not 100% sure that is needed, but what the hey...), and nothing happened. In other words, I expected that going to the url [aws server]/test1.html would result in some kind of error, but it did not. I suspect apache is not even reading the .htaccess file.

EDIT: I added the following to my httpd.conf file:

RewriteLog "/tmp/rewrite.log"
RewriteLogLevel 9

The file is created when I restart apache, but nothing ever goes in there when I go to either page I've set up. I'm failing to do something very, very basic here, but I'm not sure what...

Not sure if this is the cause of your problems, but you shouldn't mess with the

<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>

line, and it should be something like:

<Directory />
    Options FollowSymLinks
    AllowOverride None
    Deny from all
</Directory>

You should add the directory of your document root as a different container :

<Directory /var/www/html/>
    Options FollowSymLinks
    AllowOverride All
    Allow from all
</Directory>

Took me a while to find this but in some installs Apache will use multiple config files.

Look in " /etc/apache2/sites-enabled/000-default " and check that AllowOveride is set to All

Try it. This work for me. The first, you need to make sure the .htaccess file put in correct directory. For this, you go to sites-enabled folder and check which the .conf files are enabled.

cd /etc/apache2/sites-enabled
ls

Ex: 000-default.conf

Then, goto sites-available folder to edit that .conf file.

cd ../sites-available
sudo gedit 000-default.conf

Find to DocumentRoot and check directory again. If you put .htaccess file in /var/www/html/.htaccess so this line look like this:

DocumentRoot /var/www/html/

The second, You need modify <Directory> block look like this.

    <Directory /var/www/html>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
    # This directive allows us to have apache2's default start page
            # in /apache2-default/, but still have / go to the right place
            #RedirectMatch ^/$ /apache2-default/
    </Directory>

Finally, you save file and restart apache

service apache2 restart

Hope this help!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM