[+] Apache2 i mod-rewrite

Konfiguracja serwerów, usług, itp.
b0ro
Posty: 1
Rejestracja: 25 listopada 2007, 13:40

[+] Apache2 i mod-rewrite

Post autor: b0ro »

Witam

Od 2 dni bawię się w poprawne ustawienie u siebie na Apachu2 mod-rewrite bym mógł w tworzonych przez siebie stronkach używać przejrzystych odnośników. Niestety bezskutecznie. Mam Debian to Etch, Apache jest z repo. Uruchomiłem (tak mi się zdaje) mod-rewrite poleceniem:

Kod: Zaznacz cały

a2enmod rewrite
Lecz jeżeli chce skorzystać z przepisania nic nie działa. Stworzyłem sobie plik, żeby zobaczyć co się dzieje ze zmiennymi i nie są one przepisywane. Oto zawartość mojego pliku .htaccess:

Kod: Zaznacz cały

RewriteEngine On
RewriteRule ^test/([0-9][0-9])/$ test.php?zmienna1=$1
A oto plik php:

Kod: Zaznacz cały

<?php
	echo 'TU MA BYC $_GET[\'zmienna\'] >>'.$_GET['zmienna1']."<<
";
	echo "
";
	print_r($_GET);
	
?>
Jak wpiszę:

Kod: Zaznacz cały

http://localhost/~moj_user/htaccess/test/1
to co prawda pojawia się zawartość pliku test, ale tablica GET jest pusta. Próbowałem już różnych ustawień w pliku .htaccess yakich jak dodanie:

Kod: Zaznacz cały

Options FollowSymLinks
ale wtedy wywala mi 500! Zdaje mi się, że powinienem coś zmienić również w samej konfiguracji Apache2, ale przyznam szczerze nie mam pojęcia co.

[Dodano: 2007-11-26, 12:45]
Dobra znalazłem, więc może się to komuś przyda na później. Ok więc korzystam u siebie z modułu UserDir, żeby trzymać stronki u siebie w katalogu public_html. ¯eby działał mod-rewrite w apache2.conf lub httpd.conf trzeba umieścić / zmienić opcję AllowOverride na All. U mnie wygląda to tak:

Kod: Zaznacz cały

<Directory />
  Options FollowSymLinks
  AllowOverride All
</Directory>

<Directory /home/*/public_html>
  Options Indexes FollowSymLinks
  AllowOverride All
  Order allow,deny
  Allow from all
</Directory>

AccessFileName .htaccess

<Files ~ "^\.ht">
  Order allow,deny
  Deny from all
</Files>
 
 <IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteLog "/var/log/apache2/rewrite.log"
   RewriteLogLevel 9
 </IfModule>
I od razu jest logowanie do pliku. Oprócz tego w pliku .htaccess trzeba ustawić sobie parametr RewriteBase o czym dość zapominają wspomnieć.

Kod: Zaznacz cały

Options +FollowSymLinks
RewriteBase /~b0ro/htaccess/
RewriteEngine On
RewriteRule ^test/(.*)$ test.php?zmienna1=$1 [L]
I to tyle :mrgreen:
chyl-o
Junior Member
Posty: 621
Rejestracja: 24 maja 2006, 21:06
Lokalizacja: Lublin

Post autor: chyl-o »

b0ro pisze:<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
A to po co?

Jest kilka powodów, dla których nadpisywanie ustawień powinno być wyłączone dla "/". Jednym z nich jest to w jaki sposób apache realizuje całą procedurę. apache przeszukuje katalogi za htaccess od katalogu gdzie moze się on pojawić i tak leci do samego końca. Nasuwa się od razu wniosek że to spowalnia serwer. Tylko tam gdzie trzeba nalezy dawac AllowOverride a gdzie to nie jest konieczne wyłączać. Dla przykładu. Do katalogu /var/www/vhosts/user/httpdocs apache moze przeszukac:

Kod: Zaznacz cały

/
/var
/var/www
/var/www/vhosts
/var/www/vhosts/user
/var/www/vhosts/user/httpdocs
I teraz pytanie po co to?

pozdr.
lovelyHanibal
Posty: 9
Rejestracja: 16 sierpnia 2008, 12:15
Lokalizacja: Poland

Post autor: lovelyHanibal »

Ja tutaj zeby ulatwic zycie przyszlym pokolenim opisze swoj przypadek, bo mialem identyczny problem.
W Debian Lenny z apache2 w pliku /etc/apche2/sites-avalible/default mialem wpis o tesci

Kod: Zaznacz cały

	<Directory />
		Options FollowSymLinks
		AllowOverride None
	</Directory> 
i zmiana opcji AllowOverride w /etc/apache2/apache2.conf byla nadpisywana, wiec w tym przypadku nalezalo zmodyfikowac plik /etc/apche2/sites-avalible/default

PS. Dzieki za opis, sam bym stacil mase czasu by do tego dojsc.
ODPOWIEDZ