apache mod_rewrite not working with .htaccess file

2020-02-11 06:03发布

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...

3条回答
一纸荒年 Trace。
2楼-- · 2020-02-11 06:27

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>
查看更多
叼着烟拽天下
3楼-- · 2020-02-11 06:37

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!

查看更多
做个烂人
4楼-- · 2020-02-11 06:52

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

查看更多
登录 后发表回答