Avatar billede nph12 Nybegynder
25. august 2010 - 17:25 Der er 26 kommentarer og
1 løsning

Hvordan starter jeg på .httaccess og Rewrite?

Hej
Jeg kunne godt tænke mig, at lave rewrite på mine url´er. Hvordan gør jeg det (har ikke prøvet det før)? Hvordan kan jeg teste om jeg kan lave rewrite på min apache server og mit webhotel? Hvad skal jeg skrive i .httaccess filen?

Jeg har installeret apache via AppServ som er en fælles installation af PHP, MYSQL, PHPMYADMIN og Apache.
Avatar billede showsource Seniormester
25. august 2010 - 18:06 #1
Jeg kender ikke appserv, men et ex. på en .htaccess


RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([A-Za-z0-9]+)(/)?$ /index.php?id=$1

D.v.s. tegne fra atil samt 0 til 9 accepteres.
Med eller uden en afslutende /

Og du kan jo også kikke her:
http://httpd.apache.org/docs/2.2/rewrite/

Som standard er mod_rewrite ikke loadet, og brug af .htaccess er heller ikke tilladt.
Avatar billede showsource Seniormester
25. august 2010 - 18:08 #2
Hvis det er dig som har kontrol over serveren, er det bedst at lave dine .htaccess regler i f.eks. vhosts.conf eller httpd.conf

Når du tillader brug af .htaccess, vil apache ved hver request kikke dirs igennem for en .htaccess, hvilket ikke gøres hvis du definere hvad du vil i en af de nævnte conf
Avatar billede nph12 Nybegynder
25. august 2010 - 20:02 #3
"Som standard er mod_rewrite ikke loadet, og brug af .htaccess er heller ikke tilladt." Hvordan loader jeg mod_rewrite og giver tilladelse af brugen af .htaccess?
Avatar billede showsource Seniormester
25. august 2010 - 20:18 #4
Det gør du i din httpd.conf
Præcis hvor den ligger i appserv ved jeg ikke, men der er vel docs til den ?

I httpd.conf er nogle linier a'la
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so

og en


#LoadModule rewrite_module modules/mod_rewrite.so

Når der # i starten af linien, er det em "kommentar" i apache.
Fjern # for at loade mow_rewrite ved apache start.

For at bruge .htaccess laver du en "directoryblok"

<Directory "/var/www/domain/public_html">

AllowOverride All

</Directory>

Gentart apache

Du har nu mulighed for at .htaccess i dir'et:
/var/www/domain/public_html

Men som nævnt tidligere, så er det bedste du kan gøre at lave din .htaccess direkte i conf, så apache IKKE skal kikke dirs igennem ved hver request.
http://httpd.apache.org/docs/2.2/howto/htaccess.html
Avatar billede nph12 Nybegynder
26. august 2010 - 20:41 #5
Nu skulle bliver disse moduler indlæst:

LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so


Hvordan skal jeg forstå "directory" stien?
<Directory "/var/www/domain/public_html">

AllowOverride All

</Directory>

Under menuen til appserv er der en genvej til httpd.conf
Avatar billede showsource Seniormester
27. august 2010 - 07:51 #6
Læg først mærke til at jeg starter stien med " men afslutter IKKE med en "
Det er en fejl !
Enten eller .....

Hvis man har et mellemrum i stien SKAL du bruge " som start og afslutning.

Hvis du åbner httpd.conf, kan du finde en directory blok for dir'et "htdocs".

Herunder kan du lave en ny directory blok, til at definere hvad man kan for dit/dine hosts.
Avatar billede showsource Seniormester
27. august 2010 - 08:28 #7
En anden ting:
I httpd.conf har du i afslutningen noget a'la'

# Virtual hosts
#Include conf/extra/httpd-vhosts.conf

Det er i vhost filen div. hosts bliver defineret.
Hvis et domain i DNS er sat til at pege på din ip, men IKKE er defineret i vhosts, er det den første vhost som apache vil vise.

Jeg bruger altid den første vhost for ip adressen alene.

# IPADRESSE

<VirtualHost *:80>

    DocumentRoot "/var/www/htdocs"
    ServerName localhost
    ServerAlias 127.0.0.1 89.150.78.9

<Directory "/var/www/htdocs">

    Options FollowSymLinks

    AllowOverride None

    Order allow,deny
    Allow from all

</Directory>

</VirtualHost>

# DOMAINNAVN

<VirtualHost *:80>

    DocumentRoot "/var/www/domainnavn"
    ServerName domainnavn
    ServerAlias www.domainnavn

<Directory "/var/www/domainnavn">

    Options FollowSymLinks

    AllowOverride None

    Order allow,deny
    Allow from all

</Directory>

</VirtualHost>

Du vil ALTD få besøg af "ip-spammere", d.v.s. computere som står og prøver at finde huller i div. software.
Hvis din første vhost er for et domain, kan det betyde at ip-spammeren requester en måske stor indexfil.

Det undgår du ved at at bruge din ip adresse til første vhost.
Og på indexsiden for ip'en, kan du evt. vise hvilke domains du hoster.

Eksempelvis har jeg bl.a. taxablog.dk som er wildcartet i DNS til ip'en 89.150.78.9

Hvis jeg indtaster http://showsource.taxablog.dk/ får jeg vist index for ipadressen. ( http://89.150.78.9 )

Og som nævnt, definer endelig dine .htaccess regler enten i httpd.conf eller vhost.conf så apache IKKE kikker efter en .htaccess fil ved hver request.
Avatar billede showsource Seniormester
27. august 2010 - 08:30 #8
Og hov, jeg bruger

NameVirtualHost *:80

i httpd-vhosts.conf

Nå, ved ikke om du kan fatter hvad jeg skriver :O)
Men spørg endelig !
Avatar billede nph12 Nybegynder
28. august 2010 - 10:31 #9
Jeg kigger lige på det her i weekenden eller starten af næste uge.
Avatar billede nph12 Nybegynder
31. august 2010 - 21:23 #10
Jeg har fået kigget på det, men synes stadig der virker noget advanceret. Jeg har fundet en artikel inden på phpartikler om rewrite og har prøvet at skrive dette i min .htaccess fil:

ErrorDocument 404 "test

Jeg kan ikke fremprovokere en 404 fejlside, hvor der står "test" som artiklen foreskriver. Er ovenstående overhovedet rigtigt skrevet? 

Link til artiklen:
http://www.phpartikler.dk/artikler/htaccess.php
Avatar billede showsource Seniormester
31. august 2010 - 22:49 #11
Nej, det er IKKE rigtigt skrevet !
Som jeg også selv laver af fejl her i tråden, så er en enkelt " ikke brugbart.

ErrorDocument 404 "/test.html"

eller

ErrorDocument 404 /test.html

test.html ligger så i rod af domain, ( / )

Iøvrigt, i IE skal dit error doc fylde en vis mængde Kb for at virke.
Avatar billede showsource Seniormester
31. august 2010 - 22:54 #12
Iøvrigt SKAL du bruge / i starten i stien til dit error doc.
Og ellers skal du ha' en test.html i ALLE dirs.

B.t.w. kan du prøve

<?php
echo"<pre>";
print_r(apache_get_modules());
echo"</pre>";
?>

for at se hvilke modules som er loadet.
Avatar billede nph12 Nybegynder
01. september 2010 - 20:56 #13
Rewrite modulet bliver indlæst.

Array
(
    [0] => core
    [1] => mod_win32
    [2] => mpm_winnt
    [3] => http_core
    [4] => mod_so
    [5] => mod_actions
    [6] => mod_alias
    [7] => mod_asis
    [8] => mod_auth_basic
    [9] => mod_authn_default
    [10] => mod_authn_file
    [11] => mod_authz_default
    [12] => mod_authz_groupfile
    [13] => mod_authz_host
    [14] => mod_authz_user
    [15] => mod_autoindex
    [16] => mod_cgi
    [17] => mod_dir
    [18] => mod_env
    [19] => mod_imagemap
    [20] => mod_include
    [21] => mod_isapi
    [22] => mod_log_config
    [23] => mod_mime
    [24] => mod_negotiation
    [25] => mod_rewrite
    [26] => mod_setenvif
    [27] => mod_userdir
    [28] => mod_php6
)
Avatar billede showsource Seniormester
01. september 2010 - 21:43 #14
Ok.
Virker mit ex. i første indlæg så for dig ?
Avatar billede nph12 Nybegynder
02. september 2010 - 17:22 #15
Nej, ikke endnu. Hvordan kan jeg teste om koden virker?
Avatar billede showsource Seniormester
03. september 2010 - 02:45 #16
mod_rewrtie er loadet, ud fra dit dump.

D.v.s. du blot kopiere:

RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([A-Za-z0-9]+)(/)?$ /index.php?id=$1

og gemmer i en .htaccess fil, som ligger i roden af dit domain.

Og derefter tester ved at gå på, f.eks.

domain.dk/nph12

Hvis du ikke får en 404 ( fejlside ), virker det.

Og for nu at gentage mig selv:
Det er langt bedre at definere sine regler i httpd.conf eller i vhosts filen, fremfor at tillade et dir at bruge .htaccess
Yes, det er lidt mere besværligt, men suger mindre saft ud af apache.
Avatar billede showsource Seniormester
03. september 2010 - 02:46 #17
Hvis du laver en .htaccess fil, og der IKKE sker noget, er det nok fordi du IKKE har givet tilladelse til at bruge .htaccess ( <Directory ...> )
Avatar billede nph12 Nybegynder
03. september 2010 - 20:17 #18
Det virker ikke, men det er nok som du skriver, at jeg har lavet det i en .htaccess fil. Er det disse linier jeg skal tilføje?

<Directory "/var/www/domain/public_html">

AllowOverride All

</Directory>
Avatar billede showsource Seniormester
04. september 2010 - 08:10 #19
Njahh, det er nok mig som får fyret for meget af på èn gang.

Prøv:

I din httpd.conf har du noget a'la'

<Directory "C:/Appserv/www">

    Options Indexes FollowSymLinks
    Order allow,deny
    Allow from all

    AllowOverride None

</Directory>

Stien "C:/Appserv/www" har jeg fundet på:
http://www.appservnetwork.com/modules.php?name=Content&pa=showpage&pid=9

Det er stien til det dir hvor apache viser din side fra.

Og det er linien AllowOverride som er væsentlig.
Her skal None ændres til All

    AllowOverride All

Genstart Apache.

Derefter skal flg. skrives i en ny fil:

RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([A-Za-z0-9]+)(/)?$ /index.php?id=$1

og gemmes som .htaccess
Sørg for den ikke kommer til at hedde .htaccess.txt !

Dernæst skal du ha' en index.php i C:/Appserv/www

I index.php kan du så:

<?php

if(isset($_GET["id"])) {

echo $_GET["id"];

}else{

echo"GET id er ikke sat";

}
?>

D.v.s. du burde kunne gå på
http://localhost/showsource
og få vist teksten "showsource"

Prøv først ovenstående.
Så kan vi tag den derfra med alt det andet jeg har skrevet.
Avatar billede showsource Seniormester
04. september 2010 - 08:14 #20
Og din .htaccess skal selvf. ligge i C:/Appserv/www
Avatar billede nph12 Nybegynder
05. september 2010 - 16:30 #21
Nu virker det lokal på min apache server:-) Mangler lige at tjekke om det også virker på mit webhotel.
Avatar billede nph12 Nybegynder
05. september 2010 - 16:34 #22
Det virker også på mit webhotel:-) Hvordan starter jeg på at lave brugervenlig url´er?
Avatar billede showsource Seniormester
06. september 2010 - 07:08 #23
Du kan prøve med det ex. jeg har vist dig.

En go' guide finder du også her:

http://forums.devshed.com/apache-development-15/mod-rewrite-guide-common-requests-267522.html
Avatar billede nph12 Nybegynder
06. september 2010 - 19:55 #24
Super. Nu virker rewrite både lokalt og på mit webhotel.

Nu skal jeg lige forstår rewrite rigtigt. Den første linie er uden rewrite og den anden med.

domæne/index.php?id=underside

domæne/underside

Hvis jeg laver include på min hjemmeside, vil jeg så kunne hente id ($_GET["id"];) og inkludere en underside til min index-side også selvom jeg bruger domæne/underside?
Avatar billede showsource Seniormester
07. september 2010 - 06:48 #25
Ja, kan du godt, men HUSK altid at lave tjek på hvad du includer.
Ex:

<?php
// Sti til rod af domain
$dir_root = $_SERVER["DOCUMENT_ROOT"]."/";

// Dir hvor includefiler ligger
$file_dir = "includes/";

$inc_dir = $dir_root.$file_dir;

$file = "forside.php";

if(isset($_GET["id"])) {

// Stripper get id for evt. "snavs" og tilføjer .php
$filnavn = basename($_GET["id"]).".php";

    if(is_file($inc_dir.$filnavn))
    $file = $filnavn;
    }

}

include($inc_dir.$file);

?>
Avatar billede nph12 Nybegynder
07. september 2010 - 20:39 #26
showsource>> Mange tak for hjælpen:-) Opret et svar, hvis du vil have point.

Jeg prøver lidt på egen hånd at lege videre med rewrite.
Avatar billede showsource Seniormester
08. september 2010 - 06:45 #27
Ok

Glem nu ikke at hvis det er din egen server, så definer hellere regler i http.conf eller vhost så apache ikke laver unødig tjek efter en .htaccess fil
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Uanset kodesprog, så giver vi dig mulighederne for at udvikle det, du behøver.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester