Home > Blockchain >  htaccess not working but check successful localhost
htaccess not working but check successful localhost

Time:05-06

I have a simple .htaccessfile

DirectoryIndex index.php
RewriteEngine On
RewriteRule ^v4r.info/(.*)/(.*) v4r.info/NGOplus/index.php?NGO=$1&page=$2 [L,QSA]

I tested the file in htaccess.madewithlove.com, it gives a correct result and copy&pasting the result works flawlessly. (http://localhost/v4r.info/NGOplus/index.php?NGO=action-for-woman&page=board.list.php&ff=710;;;;;&startdate=2017-11-11)

But htaccess fails on localhost with an error:

File does not exist:
/var/www/html/public_html/v4r.info/action-for-woman/board.list.php

The test URL is

localhost/v4r.info/NGOplus/index.php?NGO=action-for-woman&page=board.list.php&ff=710;;;;;&startdate=2017-11-11

  • htaccess is active. (rubbish line gives "internal server error")

  • in another directory htaccess is working fine.

  • apache.conf seems ok (AllowOverride All)

Added:

The htaccess file is not in the base directory but in the 1. subdirectory (v4r.info).

What works is htaccess in v4r.info/NGOplus with a symlink 'action-for-woman' to NGOplus RewriteRule ^(. ?)/?$ index.php?page=$1 [L,QSA]

Here, apache does a «local» rewrite, i.e. just the last part of the URL (the directory name 'action-for-woman' I have to extract from $_SERVER ...)

CodePudding user response:

my .htaccess file is in v4r.info directory what is not the root directory.

In that case, your rule will never match. The RewriteRule pattern matches a URL-path relative to the directory that contains the .htaccess file.

But anyhow, rewriting is not recursive afaik.

Yes, it is "recursive" in a directory context (ie. .htaccess). In that the rewrite engine "loops" repeatedly until the URL passes through unchanged, or you have explicitly set END (Apache 2.4).

Try the following instead:

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_URI} !index\.php$
RewriteRule ^([^/] )/([^/] )$ /v4r.info/NGOplus/index.php?NGO=$1&page=$2 [L,QSA]

The check against the REDIRECT_STATUS environment variable is to ensure that only direct requests are rewritten and not already rewritten requests.

However, this pattern is still far too generic as it matches any two path segments. I put the 2nd condition that checks index.php just so you can request /v4r.info/NGOplus/index.php directly (as you were doing in your tests). However, this could be avoided by making the regex more specific.

  • Related