WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Hjälp med mod-write/.htaccess! (https://www.wn.se/forum/showthread.php?t=1038942)

Lando 2009-11-05 16:46

Hjälp med mod-write/.htaccess!
 
Hej!

Jag skulle vilja ha hjälp med en .htaccess fil.

Det jag vill göra är:

nick.domain.se/12345 (i webbläsaren)

=

domain.se/?nick=nick&id=12345


Tacksam för svar!

Jim_Westergren 2009-11-13 11:31

Först måste du se till att du har så kallad wildcard DNS för subdomänen.

Skapa ett nytt A record med *.domain.se som pekar mot din sajts IP nummer.

Sedan måste du skapa en wildcard ServerAlias i din httpd.conf under VirtualHost.

Ändra:
ServerAlias www.domain.se domain.se

Till:
ServerAlias www.domain.se domain.se *.domain.se

Sedan ändra .htaccess till följande (borde funka, men inte ej testat):

Options +FollowSymLinks
Options +Indexes
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !www.domain.se$ [NC]
RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-]+).domain.se [NC]
RewriteRule ^([0-9]+)$ ?nick=%2&id=$1 [NC,L]

Kort beskrivning:

Vi ser att förfrågan inte är med www och att subdomänen endast har a-z och 0-9 som vi även fångar i varabeln %2. Både Stora och små bokstäver går bra (flaggan NC).

Sedan kan vi göra en vanlig omskrivning där vi använder %2 och såklart $1. Förfrågan måste börja och sluta med endast siffror.

elitasson 2009-11-16 18:48

Jag är ute efter precis detta men får det ej att fungera.

Citat:

Ursprungligen postat av VirtualHost
<VirtualHost *:80>
ServerAdmin webmaster@localhost

DocumentRoot /var/www/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>

ErrorLog /var/log/apache2/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog /var/log/apache2/access.log combined

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

</VirtualHost>


<VirtualHost fotoblogg.me:80>
DocumentRoot /var/www/fotoblogg.me
ServerName www.fotoblogg.me
ServerAlias www.fotoblogg.me fotoblogg.me *.fotoblogg.me
</VirtualHost>

Citat:

Ursprungligen postat av .htaccess
Options +FollowSymLinks
Options +Indexes
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !www.domain.se$ [NC]
RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-]+).domain.se [NC]
RewriteRule ^([0-9]+)$ ?nick=%2&id=$1 [NC,L]

Citat:

Ursprungligen postat av index.php
<?php

print 'Nick: ' . $_GET['nick'] . '<br />';

print 'ID: ' . $_GET['id'];

?>

http://i35.tinypic.com/643syo.jpg

http://hejsan.fotoblogg.me/123

Lando 2009-11-16 21:40

"Skapa ett nytt A record med *.domain.se som pekar mot din sajts IP nummer."

Funkade perfekt för mig. Tack!

Jim_Westergren 2009-11-17 09:02

Bra att det funkade Lando.

elitasson,

Problemet är denna raden:

RewriteRule ^([0-9]+)$ ?nick=%2&id=$1 [NC,L]

Lägg till flaggan R (redirect) så kan du tydligare se vad som händer. Alltså [NC,L,R]

Googla och läs på om mod_rewrite, till exempel min guide för att ändra denna raden.

Kanske detta funkar:

RewriteRule ^([0-9]+)$ index.php?nick=%2&id=$1 [NC,L]

Alternativt kan du ju fånga användarnamnet med hederlig PHP istället med explode(".", $_SERVER["HTTP_HOST"]) och bara använda mod_rewrite för id.

Typ:

RewriteRule ^([0-9]+)$ index.php?id=$1 [NC,L]

Jim_Westergren 2009-11-17 09:05

PS: Ni kanske även vill använda er av dessa villkor så att ni inte krockar med existerande filer och mappar:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d


Alla tider är GMT +2. Klockan är nu 21:23.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson