Difference between revisions of "Htaccess"

From Noah.org
Jump to navigationJump to search
Line 1: Line 1:
 
[[Category:Engineering]]
 
[[Category:Engineering]]
== Protect access to files on a web server ==
+
== Password protect files on a web server ==
  
 
This shows how to setup basic auth protection for files or directories.
 
This shows how to setup basic auth protection for files or directories.
Line 38: Line 38:
 
<pre>
 
<pre>
 
staff:H.j5THn495T97
 
staff:H.j5THn495T97
 +
</pre>
 +
 +
== Basic htaccess file ==
 +
 +
<pre>
 +
php_flag register_globals off
 +
 +
# Don't  show these in generated indexes.
 +
IndexIgnore .svn .subversion .ssh .htaccess .htpasswd .auth.bfa
 +
RewriteEngine on
 +
 +
# Any attempt to download an URL with .svn/ in the path will get a 404.
 +
RewriteRule .*\.svn/.*$ - [R=404]
 +
# Any attempt to download an URL with .ssh/ in the path will get a 404.
 +
RewriteRule .*\.ssh/.*$ - [R=404]
 +
 +
# Redirect old links to new path.
 +
RewriteRule ^acidwarp[/]*$ /wiki/AcidWarp [R=301,L]
 +
 +
# a directory alias to redirect to a FQDN.
 +
RewriteCond %{REQUEST_URI} ^/email.*$ [NC]
 +
    RewriteRule ^email.*$ https://email.example.com/ [R=301,NC,L]
 +
 +
# If an URL does not exist (would give 404) then redirect to
 +
# the Wiki search to see if it can be found there.
 +
RewriteCond %{REQUEST_FILENAME} !-f
 +
RewriteCond %{REQUEST_FILENAME} !-d
 +
RewriteRule ^(.+?)(\.html|\.htm)?$ http://%{SERVER_NAME}/wiki/Special:Search?search=$1&go=Go [R=301,NC,L]
 
</pre>
 
</pre>
  

Revision as of 16:08, 28 July 2008

Password protect files on a web server

This shows how to setup basic auth protection for files or directories.

.htaccess

.htaccess for protecting individual files.

AuthName "Restricted Area" 
AuthType Basic 
AuthUserFile .htpasswd 
AuthGroupFile /dev/null 
<Files file_1.foo>
require valid-user
</Files>
<Files file_2.foo>
require valid-user
</Files>

.htaccess for protecting the whole directory.

AuthName "Restricted Area" 
AuthType Basic 
AuthUserFile .htpasswd 
AuthGroupFile /dev/null 
require valid-user

.htpasswd

Create an .htpasswd file for the username "staff":

htpasswd -c .htpasswd staff

It will look something like this:

staff:H.j5THn495T97

Basic htaccess file

php_flag register_globals off

# Don't  show these in generated indexes.
IndexIgnore .svn .subversion .ssh .htaccess .htpasswd .auth.bfa
RewriteEngine on

# Any attempt to download an URL with .svn/ in the path will get a 404.
RewriteRule .*\.svn/.*$ - [R=404]
# Any attempt to download an URL with .ssh/ in the path will get a 404.
RewriteRule .*\.ssh/.*$ - [R=404]

# Redirect old links to new path.
RewriteRule ^acidwarp[/]*$ /wiki/AcidWarp [R=301,L]

# a directory alias to redirect to a FQDN.
RewriteCond %{REQUEST_URI} ^/email.*$ [NC]
    RewriteRule ^email.*$ https://email.example.com/ [R=301,NC,L]

# If an URL does not exist (would give 404) then redirect to
# the Wiki search to see if it can be found there.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)(\.html|\.htm)?$ http://%{SERVER_NAME}/wiki/Special:Search?search=$1&go=Go [R=301,NC,L]

mod_rewrite

friendly magic cookies with pixel bugs

This makes an URL to a "pixel bug" look more friendly. For example,

 http://www.example.com/images/9948/234/1234.gif

will redirect to:

 http://www.example.com/pixel_bug.php?guid=9948&uid=234&imgid=1234
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/images/.*$ [NC]
    RewriteRule ^images/([0-9]*)/([0-9]*)/([0-9]*).gif$ /pixel_bug.php?guid=$1&uid=$2&imgid=$3 [NC,L]

mod_rewrite for MediaWiki friendly URLs

This is a pain in the ass to get right. There are not many pieces, but I had to keep fiddling with them to get it right. Plus, it's easy to get it almost but not quite right.

Assuming you want the root URI to be /wiki (just like Wikipedia). For example:

 http://www.noah.org/wiki/Htaccess

Move wiki root directory

First move your wiki directory from to w/. This is the filesystem path, not the URI. For example:

 mv /var/www/htdocs/wiki /var/www/htdocs/w

Just to be clear, the wiki/ directory should no longer exist in the filesystem. It will not just be a virtual directory handled by MediaWiki scripts.

MediaWiki LocalSettings.php

$wgScriptPath       = "/w";
$wgArticlePath      = "/wiki/$1";

.htaccess (above the MediaWiki directory)

RewriteEngine on

# This rewrites URIs in the form /wiki/Article_Name to /w/index.php/Article_Name.
RewriteCond %{REQUEST_URI} !^/wiki/index.php.*$ [NC]
    RewriteRule ^wiki/?(.*)$ /w/index.php/$1 [L]

# This takes old style links to articles in the form /wiki/index.php/Article_Name and
# redirects them to the new-style format /wiki/Article_Name.
RewriteCond %{REQUEST_URI} ^/wiki/index.php/.*$ [NC]
    RewriteRule ^wiki/index.php/(.*)$ http://www.noah.org/wiki/$1 [R=301,NC,L]