Hi Gustau,

2017-08-22 9:01 GMT+02:00 Gustau Perez <gustau.pe...@marfeel.com>:

>
>    Hello everybody,
>
>    I’ve checking all kinds of sources of information so far without
> success, I hope I didn’t miss anything.
>
>    I have a very simple RewriteRule which should take the requested
> resource part. What I want to achieve is to prepend an string before that
> matched path. Something like:
>
> RewriteRule   ^(.*)$             http://myserver/special_path/$1 [R=301]
>
>    I’d say that should take the requested resource path and redirect the
> client to a new location. It does work in some places, but I’d like to use
> under a conditional <If>. When I do
> that, the match is instead expanded to the local filesystem path, if I
> request the “/“ (root) of the server, the client is being redirected to:
>
>       http://myserver/special_path/var/www/html
>
>    Never mind about the DocumentRoot path. Anyway, that’s not the desired
> behaviour.
>
>    Perhaps we’re doing something wrong, but what puzzles me is the fact
> that if move the redirect logic outside the <If> block, then it apparently
> works fine.
>

I'd suggest to try Redirect or RedirectMatch for these use cases, they are
less complicated and more straightforward:

https://httpd.apache.org/docs/2.4/mod/mod_alias.html#redirect

As you can see in https://httpd.apache.org/docs/current/mod/core.html#if
the <If> block accepts only directives that are usable in the directory
context (
https://httpd.apache.org/docs/current/mod/directive-dict.html#Context), and
this is a special note in the RewriteRule docs that might clarify what's
happening:

"In per-directory context (Directory and .htaccess), the Pattern is matched
against only a partial path, for example a request of "/app1/index.html"
may result in comparison against "app1/index.html" or "index.html"
depending on where the RewriteRule is defined."

If I am right a note in the docs might clarify any doubts like yours, but
need to double check first :)

Luca

Reply via email to