.htaccess redirect only if parameter exists - .htaccess

hello guys i want write htaccess file that make access denied for this url localhost/img/pic.gif else if i get something like this localhost/img/pic.gif?var=welcome will redirect me to another page accept any parameter i don't need to test is get number or letter
it's that possible to do that with htaccess file all i know is this line :
ErrorDocument 404 /pic.gif
RewriteRule logo.gif localhost/myproject
thank you !

Related

Link Redirect with htaccess

I want to redirect all type of links like that :
www.sitename.com/link1-XXX.html
to
www.sitename.com/link1-XXX/
I don't want to redirect all .html links. I want to redirect all html links which end with XXX.
Solution :
RewriteRule ^(.*)XXX\.html$ /$XXX/ [R=301,L]
You did not specified the question, just told us what you want to do, not what is your problem...
if your problem is, that you dont know how to redirect only links like you described, then put this in your .htaccess with RewriteEngine on:
RewriteRule ^/(.*)-XXX\.html?$ /$1-XXX/ [L,QSA]
I did not really tested this regex..
It should take anything that end with /"something"-XXX.htm and /"something"-XXX.html and redirect it to subaddr named as "something"-XXX/
if you would need append some GET params to the processed url, you should change the regex so it ends like this:
...html?(.*)$
meaning, there can be anything after htm or html

Is it possible to wildcard a filename string to password protect a file with htaccess?

Example: wp_file*.log -- what that should do is to password protect every file whose filename start with wp_file and ends with .log -- for example wp_file-22.log and wp_file_randomfile.log.
Possible?
The way I would make this, is by adding a rewrite rule for those files, redirect to some PHP file with the origional request in the GET. The PHP file can than show a password box and eventually the content of the log file once logged in.
RewriteEngine On
RewriteRule wp_file(.*)\.log /somePHPfile.php?logFile=wp_file$1 [L]
(not tested)
If you dont need access to the log files via your website (but use e.g. ftp), than you can rewrite the requests to those files to another page
RewriteEngine On
RewriteRule wp_file(.*)\.log /index.php [L]

Is it possible to remove a "folder" at the end of a URL using an .htaccess file?

so I have a bunch of URLs
http://foo.com/people/smith/john/1
http://foo.com/people/cartman/eric/2
http://foo.com/people/simpson/bart/3
I want to change the URLs like so
http://foo.com/people/smith/john/
http://foo.com/people/cartman/eric/
http://foo.com/people/simpson/bart/
So basically, I think I need to write a condition that looks for the folder 'people' and removes the third directory from the URL. Is this possible with my .htaccess?
In the htaccess file in your document root, try:
RewriteEngine On
RewriteRule ^people/([^/]+)/([^/]+)/.+ /people/$1/$2 [L,R=301]
This redirects the browser (changing the URL in the address bar) from
http://foo.com/people/smith/john/1
to
http://foo.com/people/smith/john/
If you don't want the URL in the browser's address bar to change, remove the ,R=301 from the square brackets.

.htaccess 301 Redirect Appending Query's to End of URL

I am hoping someone can help with an unusual situation.
I have one main rewrite rule in place in my httpd.conf file which handles all of our dynamic content. The rule looks like this and works fine:
RewriteRule ^(.)(/./d/[^.]*)$ /category/refine.cgi\?\&a\=$2
The problem I have is that when I try to use .htaccess to create a simple 301 redirect, the query parameters are automatically appended to the end of the URL's so the final result looks like this:
http://www.example.com/category/page.html?&a=/category/subcategory/something/d/page/
Notice that the query string is appended to the URL when using .htaccess to create a 301 redirect.
I have solution for this on a case-by-case basis, but it's not practical to create a new rule each time I want to do a simple 301 redirect.
So, I am wondering if I can edit my "main rule" in any way so that when .htaccess is used to create redirects, the query parameters are not appended to the target URL.
Thanks in advance for any help you can provide.
If you have multiple simple redirects for which you want to suppress query string values you could put all the redirects in a RewriteMap (since you already have access to httpd.conf), and have one .htaccess rule that suppresses the query strings as below
place in htaccess
#if there is a match in the map
RewriteCond ${redirect_map:$1} !=""
RewriteRule ^(.*)$ ${redirect_map:$1}? [R,L]
place in httpd.conf
RewriteEngine On
RewriteMap redirect_map txt:/usr/local/apache/conf/redirect.map
contents of /usr/local/apache/conf/redirect.map
key followed by a space followed by target
directory/subdirectory1/subdirectory2/ example/category7/subdirectory/file.html
directory4/subdirectory2/subdirectory9/ example/category5/subdirectory4/file332.html
That's what your rule has defined it to do:
RewriteRule ^(.)(/./d/[^.]*)$ /category/refine.cgi\?\&a\=$2
It says to create a URL that will look like:
category/refine.cgi?&a=/foo/bar/
If you don't want that to happen, change your rule to be:
RewriteRule ^(.)(/./d/[^.]*)$ /category/refine.cgi\?

Redirect 301 cgi-bin/ to new URL

it's my first question here :)
I got a problem for redirecting URL:
I have old URL like www.domain.com/cgi-bin/category.cgi?type=...
And try to redirect them to www.domain.com on the htaccess
but I still have 404 error...
This is my rule :
RewriteRule ^cgi-bin/(.*)$ http://www.domain.com [R=301,L]
I verified if there are something in the conf about cgi-bin but nothing.
I did a test with "cgi-bin2" and it works...
So what can i do ?
I don't know where you problem come from but why don't you try to write a perl script which will redirect to your base domain url ?
(it can work if you have, for example, just few cgi files previously used).
In your example it seems you want to redirect "category.cgi".
so, in our case, write a "category.cgi" file in your "cgi-bin" folder and write this code inside it :
#!/usr/bin/perl
#
# fixedredir.cgi
use strict;
use warnings;
my $URL = "http://www.yourdomain.com/";
print "Status: 301 Moved\nLocation: $URL\n\n"
Hope it help !

Resources