.htaccess tips and tricks

<ifModule>
 clever stuff here
</ifModule>
 

introduction to .htaccess

This work in constant progress is some collected wisdom, stuff I've learned on the topic of .htaccess hacking, commands I've used successfully in the past, on a variety of server setups, and in most cases still do. You may have to tweak the examples some to get the desired result, though, and a reliable test server is a powerful ally, preferably one with a very similar setup to your "live" server. Okay, to begin..

..a win32 Apache mirror of corz.org     
peecee Explorer view with invisible files
.htaccess files are invisible

There's a good reason why you won't see .htaccess files on the web; almost every web server in the world is configured to ignore them, by default. Same goes for most operating systems. Mainly it's the dot "." at the start, you see?

If you don't  see, you'll need to disable your operating system's invisible file functions, or use a text editor that allows you to open hidden files, something like bbedit on the Mac platform. On windows, showing invisibles in explorer should allow any text editor to open them, and most decent editors to save them too**. Linux dudes know how to find them without any help from me.
Mac Finder view with invisible files
that same folder, as seen from Mac OS X


In both images, the operating system has been instructed to display invisible files. ugly, but necessary sometimes. You will also need to instruct your ftp client to do the same.

By the way; the windows screencap is more recent than the mac one, moved files are likely being handled by my clever 404 script.

 
** even notepad can save files beginning with a dot, if you put double-quotes around the name when you save it; i.e.. ".htaccess". You can also use your ftp client to rename files beginning with a dot, even on your local filesystem; works great in FileZilla.
 

What are .htaccess files anyway?

Simply put, they are invisible plain text files where one can store server directives. Server directives are anything you might put in an Apache config file (httpd.conf) or even a php.ini**, but unlike those "master" directive files, these .htaccess directives apply only to the folder in which the .htaccess file resides, and all the folders inside.

This ability to plant .htaccess files in any directory of our site allows us to set up a finely-grained tree of server directives, each subfolder inheriting properties from its parent, whilst at the same time adding to, or over-riding certain directives with its own .htaccess file. For instance, you could use .htacces to enable indexes all over your site, and then deny indexing in only certain subdirectories, or deny index listings site-wide, and allow indexing in certain subdirectories. One line in the .htaccess file in your root and your whole site is altered. From here on, I'll probably refer to the main .htaccess in the root of your website as "the master .htaccess file", or "main" .htaccess file.

There's a small performance penalty for all this .htaccess file checking, but not noticeable, and you'll find most of the time it's just on and there's nothing you can do about it anyway, so let's make the most of it..

** Your main php.ini, that is, unless you are running under phpsuexec, in which case the directives would go inside individual  php.ini files
 

What can I do with .htaccess files?

Almost any directive that you can put inside an httpd.conf file will also function perfectly inside an .htaccess file. Unsurprisingly, the most common use of .htaccess is to..

control access

.htaccess is most often used to restrict or deny access to individual files and folders. A typical example would be an "includes" folder. Your site's pages can call these included scripts all they like, but you don't want users accessing these files directly. In that case you would drop an .htaccess file in the includes folder with content something like this..

NO ENTRY!
# no one gets in here!
deny from all

which would deny ALL direct access to ANY files in that folder. You can be more specific with your conditions, for instance limiting access to a particular IP range, here's a handy top-level rule for a local test server..

NO ENTRY outside of the LAN!
# no nasty crackers in here!
order deny,allow
deny from all
allow from 192.168.0.0/24
# this would do the same thing..
#allow from 192.168.0

Generally these sorts of requests would bounce off your firewall anyway, but on a live server (like my dev mirror sometimes is) they become useful for filtering out undesirable IP blocks, known risks, lots of things. By the way, in case you hadn't spotted; lines beginning with "#" are ignored by Apache; handy for comments.

Sometimes, you will only want to ban one IP, perhaps some persistent robot that doesn't play by the rules..

post user agent every fifth request only. hmmm. ban IP..
# someone else giving the ruskies a bad name..
order allow,deny
deny from 83.222.23.219
allow from all

The usual rules for IP addresses apply, so you can use partial matches, ranges, and so on. Whatever, the user gets a 403 "access denied" error page in their client software (browser, usually), which certainly gets the message across. This is probably fine for most situations, but in part two I'll demonstrate some cooler ways to deny access.
 

custom error documents

I guess I should briefly mention that .htaccess is where most folk configure their error documents. Usually with sommething like this..

the usual method. the "err" folder (with the custom pages) is in the root
# custom error documents
ErrorDocument 401 /err/401.php
ErrorDocument 403 /err/403.php
ErrorDocument 404 /err/404.php
ErrorDocument 500 /err/500.php

You can also specify external URLs, though this can be problematic, and is best avoided. One quick and simple method is to specify the text in the directive itself, you can even use HTML (though there is probably a limit to how much HTML you can squeeze onto one line). Remember to begin with a ", but DO NOT end with one.

measure twice, quote once..
# quick custom error "document"..
ErrorDocument 404 "<html><head><title>NO!</title></head><body><h2><tt>There is nothing here.. go away quickly!</tt></h2></body></html>

Using a custom error document is a Very Good Idea, and will give you a second chance at your almost-lost visitors. I recommend you download mine. But then, I would.
 

password protected directories

The next most obvious use for our .htaccess files is to allow access to only specific users, or user groups, in other words; password protected folders. a simple authorisation mechanism might look something like this..

a simple sample .htaccess file for password protection:
AuthType Basic
AuthName "restricted area"
AuthUserFile /usr/local/var/www/html/.htpasses
require valid-user

You can use this same mechanism to limit only certain kinds of requests, too..

only valid users can POST in here, anyone can GET, PUT, etc:
AuthType Basic
AuthName "restricted area"
AuthUserFile /usr/local/var/www/html/.htpasses
<Limit POST>
 require valid-user
</Limit>

You can find loads of online examples of how to setup authorization using .htaccess, and so long as you have a real  user (or create one, in this case, 'jimmy') with a real  password (you will be prompted for this, twice) in a real  password file (the -c switch will create it)..

htpasswd -c /usr/local/var/www/html/.htpasses jimmy

..the above will work just fine. htpasswd is a tool that comes free with Apache, specifically for making and updating password files, check it out. The windows version is the same; only the file path needs to be changed; to wherever you want to put the password file.

Note: if the Apache bin/ folder isn't in your PATH, you will need to cd into that directory before performing the command. Also note: You can use forward and back-slashes interchangeably with Apache/php on Windows, so this would work just fine..

htpasswd -c c:/unix/usr/local/Apache2/conf/.htpasses jimmy

Relative paths are fine too; assuming you were inside the bin/ directory of our fictional Apache install, the following would do exactly the same as the above..

htpasswd -c ../conf/.htpasses jimmy

Naming the password file .htpasses is a habit from when I had to keep that file inside the web site itself, and as web servers are configured to ignore files beginning with .ht, they too, remain hidden. If you keep your password file outside the web root (a better idea), then you can call it whatever you like, but the .ht_something habit is a good one to keep, even inside the web tree, it is secure enough for our basic  purpose..

Once they are logged in, you can access the remote_user environmental variable, and do stuff with it..
the remote_user variable is now available..
RewriteEngine on
RewriteCond %{remote_user} !^$ [nc]
RewriteRule ^(.*)$ /users/%{remote_user}/$1

Which is a handy directive, utilizing mod_rewrite; a subject I delve into far more deeply, in part two.
 

get better protection..

The authentication examples above assume that your web server supports "Basic" http authorisation, as far as I know they all do (it's in the Apache core). Trouble is, some browsers aren't sending password this way any more, personally I'm looking to php to cover my authorization needs. Basic auth works okay though, even if it isn't actually very secure - your password travels in plain text over the wire, not clever.

If you have php, and are looking for a more secure login facility, check out pajamas. It's free. If you are looking for a password-protected download facility (and much more, besides), check out my distro machine, also free.
 

500 error

If you add something that the server doesn't understand or support, you will get a 500 error page, aka.. "the server did a boo-boo". Even directives that work perfectly on your test server at home may fail dramatically at your real site. In fact this is a great way to find out if .htaccess files are enabled on your site; create one, put some gibberish in it, and load a page in that folder, wait for the 500 error. if there isn't one, probably they are not enabled.

If they are, we need a way to safely do live-testing without bringing the whole site to a 500 standstill.

Fortunately, in much the same way as we used the <Limit> tag above, we can create conditional directives, things which will only come into effect if certain conditions are true. The most useful of these is the "ifModule" condition, which goes something like this..

only if PHP is loaded, will this directive have any effect
<ifModule mod_php4.c>
 php_value default_charset utf-8
</ifModule>

..which placed in your master .htaccess file, that would set the default character encoding of your entire site to utf-8 (a good idea!), at least, anything output by PHP. If the PHP4 module isn't running on the server, the above .htaccess directive will do exactly nothing; Apache just ignores it. As well as proofing us against knocking the server into 500 mode, this also makes our .htaccess directives that wee bit more portable. Of course, if your syntax is messed-up, no amount of if-module-ing is going to prevent a error of some kind, all the more reason to practice this stuff on a local test server.

 

groovy things to do with .htaccess

So far we've only scratched the surface. aside from authorisation, the humble .htaccess file can be put to all kinds of uses. If you've ever had a look in my public archives you will have noticed that that the directories are fully browsable, just like in the old days before adult web hosts realized how to turn that feature off! a line like this..

bring back the directories!
Options +Indexes +MultiViews +FollowSymlinks

will almost certainly turn it back on again. And if you have mod_autoindex.c installed on your server (probably, yes), you can get nice fancy indexing, too..

show me those files!
<IfModule mod_autoindex.c>
 IndexOptions FancyIndexing
</ifModule>

..which, as well as being neater, allows users to click the titles and, for instance, order the listing by date, or file size, or whatever. It's all for free too, built-in to the server, we're just switching it on. You can control certain parameters too..

let's go all the way!
<IfModule mod_autoindex.c>
 IndexOptions FancyIndexing IconHeight=16 IconWidth=16
</ifModule>

Other parameters you could add include..

NameWidth=30
DescriptionWidth=30
IconsAreLinks SuppressHTMLPreamble (handy!)

I'm not mentioning the "XHTML" parameter in Apache2, because it still isn't! Anyways, I've chucked one of my old fancy indexing .htaccess file onsite for you to have some fun with. Just add readme.html and away you go! note: these days I use a single header files for all  the indexes, and only drop in local "readme" files. Check out the example, and my public archives for more details.

custom directory index files

While I'm here, it's worth mentioning that .htaccess is where you can specify which files you want to use as your indexes, that is, if a user requests /foo/, Apache will serve up /foo/index.html, or whatever file you specify.

You can also specify multiple files, and Apache will look for each in order, and present the first one it finds. It's generally setup something like..
DirectoryIndex index.html index.php index.htm


It really is worth scouting around the Apache documentation, often you will find controls for things you imagined were uncontrollable, thereby creating new possibilities, better options for your website. My experience of the magic "LAMP" (Linux-Apache-MySQL-PHP) has been.. "If you can imagine that it can be done, it can be done". Swap "Linux" for any decent operating system, the "AMP" part runs on most of them.

Okay, so now we have nice fancy directories, and some of them password protected, if you don't watch out, you're site will get popular, and that means bandwidth..

 

save bandwidth with .htaccess!

If you pay for your bandwidth, this wee line could save you hard cash..

save me hard cash! and help the internet!
<ifModule mod_php4.c>
 php_value zlib.output_compression 16386
</ifModule>

All it does is enables PHP's built-in transparent zlib compression. This will half your bandwidth usage in one stroke, more than that, in fact. Of course it only works with data being output by the PHP module, but if you design your pages with this in mind, you can use php echo statements, or better yet, php "includes" for your plain html output and just compress everything! Remember, if you run phpsuexec, you'll need to put php directives in a local php.ini file, not .htaccess. See here for more details.

 

hide and deny files

Do you remember I mentioned that any file beginning with .ht is invisible? .."almost every web server in the world is configured to ignore them, by default" and that is, of course, because .ht_anything files generally have server directives and passwords and stuff in them, most  servers will have something like this in their main configuration..

Standard setting..
<Files ~ "^\.ht">
 Order allow,deny
 Deny from all
 Satisfy All
</Files>

which instructs the server to deny access to any file beginning with .ht, effectively protecting our .htaccess and other files. The "." at the start prevents them being displayed in an index, and the .ht prevents them being accessed. This version..

ignore what you want
<Files ~ "^.*\.([Ll][Oo][Gg])">
 Order allow,deny
 Deny from all
 Satisfy All
</Files>

tells the server to deny access to *.log files. You can insert multiple file types into each rule, separating them with a pipe "|", and you can insert multiple blocks into your .htaccess file, too. I find it convenient to put all the files starting with a dot into one, and the files with denied extensions into another, something like this..

the whole lot
# deny all .htaccess, .DS_Store $hî†é and ._* (resource fork) files
<Files ~ "^\.([Hh][Tt]|[Dd][Ss]_[Ss]|[_])">
 Order allow,deny
 Deny from all
 Satisfy All
</Files>

# deny access to all .log and .comment files
<Files ~ "^.*\.([Ll][Oo][Gg]|[cC][oO][mM][mM][eE][nN][tT])">
 Order allow,deny
 Deny from all
 Satisfy All
</Files>

would cover all ._* resource fork files, .DS_Store files (which the Mac Finder creates all over the place) *.log files, *.comment files and of course, our .ht* files. You can add whatever file types you need to protect from direct access. I think it's clear now why the file is called ".htaccess".
 

<FilesMatch>

These days, using <FilesMatch> is preferred over <Files>, mainly because you can use regular expression in the conditions (very handy), produce clean, more readable code. Here's an example. which I use for my php-generated style sheets..

parse file.css and file.style with the php machine..
# handler for phpsuexec..
<FilesMatch "\.(css|style)$">
 SetHandler application/x-httpd-php
</FilesMatch>

Any files matching the regular expression statement, that is files with a *.css or *.style extension, will now be handled by php, rather than simply served up by Apache. Any <Files> statements you come across can be advantageously replaced by <FilesMatch> statements. Good to know.

 

more stuff

At the end of my .htaccess files, there always seems to be a section of "stuff"; miscellaneous commands, mainly php flags and switches; so it seems logical to finish up the page with a wee selection of those..

php flags, switches and other stuff..
# let's enable php (non-cgi, aka. 'module') for EVERYTHING..'
AddType application/x-httpd-php5 .htm .html .php .blog .comment .inc

# better yet..
AddHandler php5-script .php

# legacy php4 version..'
AddType application/x-httpd-php .htm .html .php .blog .comment .inc

# don't even think about setting this to 'on'
php_value register_globals off

# no session id's in the URL PULEEZE!
php_value session.use_trans_sid 0
# should be the same as..
php_flag session.use_trans_sid off
# using both should also work fine!

# php error logs..
php_flag display_errors off
php_flag log_errors on
php_value track_errors on
php_value error_log /home/cor/errors/phperr.log

# if you like to collect interesting php system shell access and web hack scripts
# get yourself a SECURE upload facility, and just let the script-kiddies come …
# in no time you will have a huge selection of fascinating code. If you want folk to
# also upload zips and stuff, you might want to increase the upload capacities..
php_value upload_max_filesize 12M
php_value post_max_size 12M

# php 5 only, afaik. handy when your server isn't where YOU are.
php_value date.timezone Europe/Aberdeen
# actually, Europe/Aberdeen isn't a valid php timezone, so that won't work.
# I recommend you check the php manual for this function, because many crazy places ARE!

Note: For most of the flags I've tested, you can use on/off and true/false interchangeably, as well as 0/1, also php_value and php_flag can be switched around while things continue to work as expected! I guess, logically, booleans should always be php_flag, and values, php_value; but suffice to say, if some php erm, directive  isn't working, these would all be good things to fiddle with!

Of course, the php manual explains all. The bottom line is; both will work fine, but if you use the wrong type in .htaccess, say, set a php_flag using php_value, a php ini_get() command, for instance, would return true, even though you had set the value to off, because it reads off value as a string, which of course evaluates to not-zero, i.e. 1, or "true". If you don't rely on get_ini(), or similar, it's not a problem, though clearly it's better to get it right from the start. By the way; one of the values above is incorrectly set. Did you spot it?

Most php settings, you can override inside your actual scripts, but I do find it handy to be able to set defaults for a folder, or an entire site, using .htaccess.
 

over to you..

That should get you started with .htaccess, quite easy when you know how. If you really want to bend your brain out of shape, follow the link below for part two of the series, where I delve into the arcane mysteries of URL rewriting.

 
;o)
(or
 
 
 

Before you ask a question..

Firstly, read this at least once in your life. I insist!

NOTE: THIS IS NOT A COMMUNITY. And I am not your free tech dude. Sure, folk sometimes drop back in, but realistically, the chances of someone else coming along and answering your tech question are about as close to zero as it gets; almost no one sticks around but me, the guy who wrote all that text (above).

If you can't be bothered to read the article, I can't be bothered responding. Capiche? I do read all comments, though, and answer questions about the article. I'm also keen to discuss anything you think I've missed, or interesting related concepts in general.

If you are still sure that you want to post your own, personal, tech question, then please ensure that you first, either..

a) Have read the article (above) and have tried "everything" yourself; in which case; post the exact code that isn't working (preferably inside [pre][/pre] tags), or else..

b) Pay me. The PayPal button is at the top right of the page.

Other posts will be ignored and/or deleted.

If you want to know about about rewriting with mod_rewrite please see the next page!


cbparser powered comments..

previous comments (seven pages)   show all comments

AskApache - 07.11.07 4:07 pm

Some of the greatest and most creative .htaccess tips and tricks I've ever found, and i have searched extensively.. Used some of your ideas for my .htaccess articles.


cor - 08.11.07 12:36 am

Feel free to use anything you like! So long as you give credit, link back to here, it's all good.

Hmm. Strange, I don't see you in my referrers. smiley for :ken:

;o)
(or


RS - 12.11.07 7:57 am

Dude, that askapache might as well be a spam bot. I'd lose the link to his site. That ass is constantly spamming the wiki, forums, etc and just grabs other peoples shit for his site. Peace!


cor - 12.11.07 8:23 am

Thanks for the heads-up, RS.

It's a fairly common practice. I get mails every now and again from folk concerned that someone has ripped off my work, sometimes whole articles, verbatim. In fact, there's a whole TLD out there that is nothing but my .htaccess articles, and it has nothing to do with me, I can assure you!

The only thing that annoys me, is that I do still occasionally update these pages, refining and adding things, and anyone seeing a copy or a rip-off, is missing out on all that. A simple link back here solves the problem. But it's sooo hard to make a link, isn't it?

I got mailed recently about an interesting article on Automatic translation with .htaccess. The funny thing is, they don't seem to be able to get it to work properly, and as the author hasn't acknowledged that he knicked the idea from me, and isn't able to see what he's done wrong, himself, they are screwed until a) someone points them back to here, or b) the "author" does some hard work.

Most people won't notice who did what and where and when, and it doesn't actually matter that much to me, so long as the information the user gets, is good, code works, which sadly isn't always the case..

Our askapache friend seems to be in "growth phase" at the moment, gunning for PR, I guess. I checked out his site over the weekend, and found quite a few examples of unworkable code, clearly lifted from elsewhere without a full understanding of the caveats and gotchas that go with it. Other "ideas" were just plain stupid.

My plan was to see if he might give some credit on his page (not just to me), and if so, let the link slide, though with a "rel=nofollow", of course smiley for ;)

But after your extra information, I may just neuter it, or point it somewhere else, DisneyLand, perhaps.

Cheers!

;o)
(or


RS - 15.11.07 11:02 pm

too funny. that douche just got his affiliate account killed and it looks like the hosting account won't be far behind for stuff like spamming and deceptive affiliate link redirection. he even had 'sponsored by dreamhost' on his site and thought it was okay because he was an affiliate. lmao

this askapache clown is delusional. this thread at his host's forum is pretty funny:

http://discussion.dreamhost.com/showthreaded.pl?Cat=&Board=forum_promotion&Number=94595


cor - 15.11.07 11:49 pm

no comment! smiley for :blank:


Daymon - 01.01.08 7:41 am

I recently moved a static HTML site (don't ask) to Godaddy and used

AddHandler x-httpd-php5 .php .html

so it will handle all the html pages as php, which saved me from renaming them. The only problem is when I try to upload 3'rd part software written in php, Godaddy gets retarded on me. Do you know of a way for it to ignore the rewrite rule on .php pages while still rewriting html? smiley for :eek:


Aryan - 09.01.08 10:10 pm

Hi,

I have encountered a problem, here it goes..

I have a set of files in "root/docs/id/" and I have common php script that have to be execute when ever any of these files have been accessed and the access methods or request type may be any thing.

Is there any way to archive this....

Thanks smiley for :D ...


xtirpata - 28.01.08 5:32 pm

Thanks for the tute!

In your 'Useful Links.." you mention .htaccess generator and ask 'Where's the php source. Anyone?'

There's a link to

http://www.southeasttelephone.com/tools/htAccessor/readme.txt

which credits

Chris Todd
chris@bitesizeinc.net
http://www.bitesizeinc.net/

but it's a dead link.

smiley for :ehh:


Bob_bob - 01.02.08 1:19 am

First of all thank you for making this page and helping public with their problems they have, (I am one of them).

I have a question, and would like to know is that any possibilities for .htaccess to make a session expires after x times of trying to make login?

I am asking because, there is someone is coming to my site everyday for few hours and trying to login and then leaves. So I would like to make his/her IP ban only for that day; lets say after 3 times of unsuccessful login.

Regards,


cor - 26.02.08 5:42 am

Daymon, try part 2 (next page).

Aryan, try php's auto_prepend_file. see here for details. You can do it in the main .htaccess file for that directory/tree.

xtirpata, thanks dude. I'll maybe see if I can track this guy down, get his php.

Bob_bob, it's an interesting question, and though I suspect it *may* be possible, it probably wouldn't be pretty, and would likely involve some fairly inefficient jiggery-pokery.

Alternatively, a cookie is fairly easy to set (on your 401 page/.htaccess) and check (on your login page/.htaccess), though obviously, the client could unset that themselves, if they sussed out your tactic. But it would make things inconvenient, and that's usually enough of a deterrent for most folk.

At the end of the day, a php session would be *much* easier to implement, and more secure, too. Try any of my logins here at corz.org (admin page/add-a-blog/etc.); you'll see what I mean.

for now..

;o)
(or


Bijan - 28.02.08 8:31 am

Thanks for the content.

I have a image folder which I want to access limit it to all public users by browsing the folder directly eg: http://mydomain.com/images/myimage.jpg

But I want to have access to it by a php script that can show the images in that folder.
I have used the .htaccess file in the image folder like :

deny from all

But with this I cannot view the images with that script,
If I use something like :

deny from all
allow from 127.0.0.1 # or the server IP

It would be solved, But my question is :

Is there another way to this stuff ?
which nobody can have sirect access to a folder, and they only can have access to view the images by a special php script that can limit access the folder ?

Thanks,


cor - 28.02.08 10:07 am

Bijan, try part two (next page - 'hotlinking' section).
Link above these comments.

;o)
(or


Nacus - 26.03.08 12:55 am

I just found this site and it is very helpful. I do have an issue that I would like to present. Maybe the community can help solve it.

I have a web site that uses HTAccess to protect files from unauthenticated site visitors. The content is in a protected directory, but the pages that have the links to that protected content are publicly available. When I just click on a link before logging in, the authentication dialog appears as expected. However, before logging in, when I right click on the same link and select Save Link As, the authentication dialog does not appear. Instead, the Save As dialog appears and when I try to save the files (which can be fairly large), the Downloads window appears a shows a very fast download. If I open the file with a text editor it says inside that I have to authenticate to before I can get the file I want.

If, before authenticating, I try to download a file with Safari, IE and Opera, I get the expected behaviour: Authentication dialog appears, I log in, then the download starts.

Am I missing something or this this a Firefox issue?


cor - 26.03.08 2:05 am

Yes, the behaviour is browser-specific. I guess the Firefox developer's rationale would be that it's unusual for links to protected resources to appear on an unprotected page, or something like that. Regardless, many (perhaps most) folk wouldn't realize that the .zip file (or whatever) was actually an HTML page - they would just have a broken zip, and no explanation.

K-Meleon reports, "Download failed. Authentication required", which at least lets you know what happened; but I still prefer the IE/Safari/Opera method.

You might want to bug the Firefox developers about what you "expect", and with a bit (a LOT) of luck, they might even consider changing it. It might even already be a bug - worth a look.

Good luck!

;o)
(or

p.s. this is NOT a community!


dREW - 06.04.08 1:26 am

I have set up my .htaccess but when i visit the page where there should be a prompt for user name and password nothing appears. Any thoughts?


cor - 06.04.08 2:25 am

Yeah. Paste your .htaccess code.

;o)
(or


Sumeet - 08.04.08 3:57 pm

What an enlightening article!
I knew nothing of .htaccess files before
visting ur site,really very thankful to u.
Great job!


jhoy imperial - 16.04.08 7:08 am

hello!

i just like to ask if this is possible with htaccess

rewrite from : www.domain.com/main
rewrite to : www.domain.com/folderhere/hello.php

thanks =) smiley for :roll:


cor - 16.04.08 7:14 am

jhoy imperial, try reading part 2! (link above)

;o)
(or


jhoy imperial - 06.05.08 2:11 am

cool thanks smiley for :)


 

leave a comment, become part of this site!


First, confirm that you are human by entering the code you see..

(if you find it difficult to read, refresh the page for a new code)


Enter the 5-digit code this text sounds like : lower-case vee, Upper-Case Pee, zeero, lower-case tee, Upper-Case Pee


 
 
[site notice]

If you give a shit, BUY A SHIRT!