htaccess redirect problem - apache

I'm trying to get my .htaccess to redirect all requests to the /blogs directory, except for requests that start with /staff. This is what I have so far:
RewriteEngine On
RewriteRule ^staff(.*)$ staff/$1 [L]
RewriteRule ^(.*)$ blogs/$1 [L]
It works fine for every case, except when I do http://mydomain.com/staff or http://mydomain.com/staff/alice in which case I get a 500 Internal Error.
What am I doing wrong?

Try this:
RewriteRule ^staff/ - [L]
RewriteRule !^blogs/ blogs%{REQUEST_URI} [L]

What is logged to error.log? The error may be coming from either mod_rewrite or from your application itself.

Related

Redirecting All Requests to Index.html

I would like to redirect all requests made to my website to index.html if the request aren't made from AJAX. Apart from just redirecting, I would like to append the request URI as a get parameter to index.html, for example if someone visits http://example.com/something.html, the person should be redirected to http://example.com/?origin=something.html. To achieve this, I have the following code in a .htaccess file
RewriteEngine On
RewriteCond %{HTTP:X-Requested-With} !=XMLHttpRequest
RewriteCond %{HTTP:X-REQUESTED-WITH} !^(XMLHttpRequest)$
RewriteCond %{REQUEST_URI} !^/(index.html)?$ [NC]
RewriteRule ^/.*.html$ /index.html?origin=%{REQUEST_URI} [R=301,L,NC]
However, it does not redirect any requests as expected. I'm on Apache/2.4.33, Ubuntu 16.04. What am I doing wrong?
As CBroe pointed out, I was facing the issue because the context of .htaccess has the initial / removed from %{REQUEST_URI} that is usually the conditional part of RewriteRule. Therefore, the solution was only having to change the RewriteRule to:
RewriteRule ^(.*).html$ /index.html?origin=%{REQUEST_URI} [R=301,L,NC]

Rewrite one directory to another .htaccess

I want to automatically redirect http requests to news/images to ../images.
Is that possible with .htaccess?
Thing is: request to www.site.tld/news/images ... should go to www.site.tld/images ...
I have tried:
RewriteEngine On
...
...
RewriteRule (.*)news/images(.*) ../images [R=301,L]
not working.
I have ensured that apache have mod_rewrite.c enabled.
To redirect all requests for /news/images/ to /images/, capture the part after images and use it in the RewriteRule
RewriteRule ^news/images(.*)$ /images$1 [R,L]
When it works as it should, you may replace R with R=301. Never test with R=301.
You can use:
RewriteRule ^www\.site\.tld/news/images$ /www.site.tld/images?&%{QUERY_STRING}
or you can also use:
RewriteCond %{HTTP_HOST} ^www.site.tld/news/images$ [NC]
RewriteRule ^(.*)$ http://www.site.tld/images/$1 [R=301,L]
But as #arkascha said, please do some research first, there are MANY answers to this sort of problem! :) Either way, I hope this helps.

Where is my mod rewrite fail?

I have got url
ipaddr/opensys/base/
and some other similar, like
ipaddr/opensys/base/something.php?olol=yep
I want to remove from url "opensys" and display there "center", i want to see this links working:
ipaddr/center/base/
and
ipaddr/center/base/something.php?olol=yep
I did it with symlinks, but it was not good, because system is very difficult and with symlink some plugins not works, I want to do it with .htaccess only, after it all will be ok.
My htaccess is:
but links, which i want to see is not working, why?
RewriteEngine on
RewriteRule ^/opensys/base/(.*)$ /center/base/$1 [L]
RedirectMatch 301 ^/opensys/base/(.*)$ /center/base/$1
Redirect works good, but i see 404, rewrite rules is not working. Why?
You also need to handle the /center/base/ now in the .htaccess file as you must be handling opensys earlier. Something like this -
RewriteRule ^/opensys/base/(.*)$ /center/base/$1 [R=301]
RewriteRule ^/center/base/(.*)$ /index.php?args=$1 [QSA,L]
You can use this code in root .htaccess:
RewriteEngine on
RewriteCond %{THE_REQUEST} /opensys/(base/\S*)\s [NC]
RewriteRule ^ /center/%1 [R=301,L,NE]
RewriteRule ^center/(base/.*)$ opensys/$1 [L,NC]

Apache htaccess sending URLs in a URL

I'm trying to send a URL in a URL, and there's ModRewrite in the middle.
Here's the Rewrite Rule. It's used to search for a user's profile.
RewriteEngine On
RewriteRule ^(query)/(profile)/([a-z0-9:.()\-\ ]+)/?$ search/index.php?scope=$2&query=$3 [NC,L]
And this is the URL
http://www.example.com/query/profile/http://www.facebook.com/example
No matter how I do the rewrite rule, I keep getting NetworkError: 500 Internal Server Error or NetworkError: 404 Not Found if it's a URL I put there.
How can I do this right? I'm on Windows 7 Home Premium. Am I missing something?
The URL above is passed using ajax.
Edit:
#htaccess in site1 folder
RewriteRule ^resources/?(.*)/?$ /control/$1 [NC,L]
#htaccess in control folder
RewriteRule ^(query)/(profile)/([a-z0-9:.()\-\ ]+)/?$ search/index.php?scope=$2&query=$3 [NC,L]
next folder is `search` which has `index.php`
URL used
http://www.example.com/resources/query/profile/http://www.facebook.com/example
EDIT:
I redid the RewriteRule like below, and don't get any error messages now, but Apache seems to be taking off one / from the url after the http://. So I get only http:/www.facebook.com/example. Any help with that will be appreciated.
RewriteRule ^(query)/(profile)/([a-z0-9\/:.()\-\ ]+)/?$ search/index.php?scope=$2&query=$3 [NC,L]`
You need to capture URL from RewriteCond otherwise Apache will trim multiple // into a single one.
Change this rule in root .htaccess:
RewriteCond %{REQUEST_URI} /resources/(.+)$ [NC]
RewriteRule ^ /control/%1 [L]
Have this in /control/.htaccess file:
RewriteEngine On
RewriteBase /control/
RewriteCond %{REQUEST_URI} /(query)/(profile)/(.+)$ [NC]
RewriteRule ^ /resources/search/index.php?scope=%2&query=%3 [QSA,L]

Redirect %20%E2%80%8E

I have this customer that send an email with http://url/%20%E2%80%8E and everyone is getting a 404 not found. So he asked me for a redirection and I though sure easy. But it looks like is not working... please help!!
I tried this:
redirect 301 /\%20\%E2\%80\%8E http://url/promo-content/
and
redirect 301 /%20%E2%80%8E http://url/promo-content/
and is not working..
I also tried this
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/([a-zA-Z0-9_-]+)/\%20\%E2\%80\%8E$
RewriteRule ^(.*) http://url/promo-content/%1/ [R,L]
But still not working... any sugestion???
The URI gets decoded first before mod_rewrite rules are applied. Try:
RewriteEngine On
RewriteRule ^\ ‎ /promo-content/ [L,R=301]