Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

So I'm trying to do this redirect under lighttpd, but for whatever reason I just can't get it to work. I've tried looking a debug logs and all.

Say I have entered http://mydomain.com/http://test.com I would like lighttpd to redirect it to http://mydomain.com/test.com.

Here is my conf, as far as I can tell it should work. It's like lighttpd is just ignoring the redirect rule (the other one's are working though).

The redirect is the last one at the bottom.

# Debian lighttpd configuration file
#

############ Options you really have to take care of ####################

## modules to load
# mod_access, mod_accesslog and mod_alias are loaded by default
# all other module should only be loaded if neccesary
# - saves some time
# - saves memory

server.modules              = (
            "mod_access",
            "mod_alias",
            "mod_accesslog",
            "mod_compress",
            "mod_rewrite",
            "mod_redirect",
        "mod_fastcgi",
#           "mod_evhost",
#           "mod_usertrack",
#           "mod_rrdtool",
#           "mod_webdav",
            "mod_expire",
#           "mod_flv_streaming",
            "mod_evasive"
)

#### performance options (aggressive timeouts)
server.max-keep-alive-requests = 6
server.max-keep-alive-idle = 15
server.max-read-idle     = 15
server.max-write-idle    = 15
connection.kbytes-per-second = 256
evasive.max-conns-per-ip = 5

#### name the server daemon publicly displays
server.tag               = "'; DROP TABLE servertypes; --"

#### disable ssl if not needed
ssl.engine               = "disable"

## a static document-root, for virtual-hosting take look at the
## server.virtual-* options
server.document-root       = "/var/www/"

## where to upload files to, purged daily.
server.upload-dirs = ( "/var/cache/lighttpd/uploads" )

## where to send error-messages to
server.errorlog            = "/var/log/lighttpd/error.log"

## files to check for if .../ is requested
index-file.names           = ( "index.php", "index.html",
                               "index.htm", "default.htm",
                               "index.lighttpd.html" )


## Use the "Content-Type" extended attribute to obtain mime type if possible
# mimetype.use-xattr = "enable"

##  MimeType handling
## -------------------
##
## Use the "Content-Type" extended attribute to obtain mime type if
## possible
##
mimetype.use-xattr        = "disable" 

##
## mimetype mapping
##
mimetype.assign             = (
  ".pdf"          =>      "application/pdf",
  [...]
  ".oth"          =>      "application/vnd.oasis.opendocument.text-web",

# make the default mime type application/octet-stream.
  ""              =>      "application/octet-stream",
)

#### accesslog module
accesslog.filename         = "/var/log/lighttpd/access.log"

## deny access the file-extensions
#
# ~    is for backupfiles from vi, emacs, joe, ...
# .inc is often used for code includes which should in general not be part
#      of the document-root
url.access-deny            = ( "~", ".inc" )

##
# which extensions should not be handle via static-file transfer
#
# .php, .pl, .fcgi are most often handled by mod_fastcgi or mod_cgi
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )


######### Options that are good to be but not neccesary to be changed #######

## Use ipv6 only if available.
# include_shell "/usr/share/lighttpd/use-ipv6.pl"

## bind to port (default: 80)
# server.port               = 81

## bind to localhost only (default: all interfaces)
## server.bind                = "localhost"

## error-handler for status 404
#server.error-handler-404  = "/error-handler.html"
#server.error-handler-404  = "/error-handler.php"

## to help the rc.scripts
server.pid-file            = "/var/run/lighttpd.pid"

##
## Format: <errorfile-prefix><status>.html
## -> ..../status-404.html for 'File not found'
#server.errorfile-prefix    = "/var/www/"

## virtual directory listings
dir-listing.encoding        = "utf-8"
server.dir-listing          = "disable"

## send unhandled HTTP-header headers to error-log
#debug.dump-unknown-headers  = "enable"

### only root can use these options
#
# chroot() to directory (default: no chroot() )
#server.chroot            = "/"

## change uid to <uid> (default: don't care)
server.username            = "www-data"

## change uid to <uid> (default: don't care)
server.groupname           = "www-data"

#### compress module
compress.cache-dir          = "/var/cache/lighttpd/compress/"
compress.filetype           = ("text/plain", "text/html", "application/x-javascript", "text/css", "image/png")


#### url handling modules (rewrite, redirect, access)
# url.rewrite                 = ( "^/$"             => "/server-status" )
# url.redirect                = ( "^/wishlist/(.+)" => "http://www.123.org/$1" )

#
# define a pattern for the host url finding
# %% => % sign
# %0 => domain name + tld
# %1 => tld
# %2 => domain name without tld
# %3 => subdomain 1 name
# %4 => subdomain 2 name
#
# evhost.path-pattern = "/home/storage/dev/www/%3/htdocs/"

#### expire module
# expire.url                  = ( "/buggy/" => "access 2 hours", "/asdhas/" => "access plus 1 seconds 2 minutes")
$HTTP["url"] =~ "\.(jpg|gif|png|css|js)$" {
     expire.url = ( "" => "access 7 days" )
}

#### rrdtool
# rrdtool.binary = "/usr/bin/rrdtool"
# rrdtool.db-name = "/var/www/lighttpd.rrd"

#### variable usage:
## variable name without "." is auto prefixed by "var." and becomes "var.bar"
#bar = 1
#var.mystring = "foo"

## integer add
#bar += 1
## string concat, with integer cast as string, result: "www.foo1.com"
#server.name = "www." + mystring + var.bar + ".com"
## array merge
#index-file.names = (foo + ".php") + index-file.names
#index-file.names += (foo + ".php")


#### external configuration files
## mimetype mapping
# include_shell "/usr/share/lighttpd/create-mime.assign.pl"

## load enabled configuration files,
## read /etc/lighttpd/conf-available/README first
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"


fastcgi.server = ( ".php" => ((
            "bin-path" => "/usr/bin/php-cgi",
            "socket" => "/tmp/php.socket",
            "max-procs" => 1,
            "min-procs" => 1,
            "bin-environment" => (
                        "PHP_FCGI_CHILDREN" => "5",
                        "PHP_FCGI_MAX_REQUESTS" => "500" 
                ),
            "broken-scriptfilename" => "enable"
          )))


$HTTP["host"] =~ "^78\.129\.251\.116$" {
        url.redirect = ( "^/(.*)" => "http://dev.samp.im" )
}

$HTTP["host"] =~ "^www\.(.*)" {
    url.redirect = ( "^/(.*)" => "http://%1/$1" )
}

$HTTP["host"] =~ "^dev\.samp\.im$" {
    dir-listing.activate = "enable"
}   

$HTTP["host"] =~ "^isitup\.org$" {
    url.redirect = ( "^/http://(.*)" => "http://isitup.org/$1" )

    url.rewrite-once = (
    "^/$"         => "/index.php",
    "^/mint/(.*)$"    => "/mint/$1",
    "^/fever/(.*)$"   => "/fever/$1",
    "^/check.php(.*)$" => "/check.php$0",
    "^/offline$"      => "/offline.php",
    "^/error$"        => "/error.php",
    "^/save/(.*)$"    => "/index.php?d=$1&save",
    "^/d/(.*)$"       => "/index.php?d=$1",
    "^/clear$"        => "/index.php?clear",
    "^/(.*)\.(json|txt)$" => "/check.php?domain=$1&output=$2",
    "^/(.*)\.(php|html|png|jpg|css|gif|js)" => "$0",
    "^/(.*)$"     => "/check.php?domain=$1" )
}
share|improve this question

migrated from webmasters.stackexchange.com Oct 12 '11 at 15:59

This question came from our site for pro webmasters.

    
Perhaps this should really belong on Server Fault? I'm not entirely sure... –  Sam Jun 13 '11 at 23:17
    
I'm checking with the team at ServerFault to see what their thoughts are moving this over there. –  John Conde Oct 12 '11 at 15:56

2 Answers 2

up vote 1 down vote accepted

url.rewrite-once is handled before url.redirect - the final rule of the rewrite matches the request, and modifies it:

"^/(.*)$"     => "/check.php?domain=$1"
http://mydomain.com/http://test.com -> http://mydomain.com/check.php?domain=http://test.com

This rewrite occurs then the redirect is evaluated; it no longer matches. You'd need to remove the rewrite in question to successfully redirect.

share|improve this answer

Try escaping the colon and slashes and capture the end of the string:

url.redirect = ( "^/http\:\/\/(.*)$" => "http://isitup.org/$1" )
share|improve this answer
    
Thank you, but this also doesn't seem to work. It's like lighttpd is just ignoring that one rule... –  Sam Jun 14 '11 at 13:55
    
Do you need to restart it or something else to tell it the file has changed? You could try getting http:something to redirect and then add in the slashes if that works. Or use a rewrite instead of a redirect. –  paulmorriss Jun 14 '11 at 14:23
    
Nope I do restart it every time. I've also tried with just a string (like http, so no fancy chars) and it still doesn't work. Because of that I think it's just a messed up setting somewhere. Thanks for your help though. Also I would ideally like it as a redirect so that users can visually see they've made an error. –  Sam Jun 18 '11 at 12:33

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.