Fórum Root.cz
Hlavní témata => Server => Téma založeno: mathew7 02. 09. 2013, 19:17:21
-
Zdravím, fakt už neviem ako pokračovať, chcel som si nahodiť mod_rewrite na web serveri avšak som zistil, že mi celkovo server ignoruje .htaccess. V apache2.conf mám AccessFileName .htaccess, ďalej som nastavil aj :
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
Skúšal som aj bez slashov, rôzne ináč zadať priečinok, / priečinok, chmod .htaccess je 644 a stále nič. Obsah .htaccess som na skúšku dal hocičo aby som videl či aspoň vyhodí chybu po načítaní webu ale nič sa nestalo. Bol by som vďačný za rady :)
-
a2enmod rewrite ? je modul rewrite zaveden v konfiguraci ?
-
Áno, aktivoval som ho, resetol httpd aj v apachectl beží. Taktiež som skúšal bez .htaccess priamo v apache2.conf nastaviť napr. jednoduchý rewrite,
RewriteEngine on
RewriteRule ^index.php$ stranka.xxx
alebo
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^clanky/(\d+)*$ ./profile.php?clanky=$1
a to mi v súbore nefungovalo, skúšal som to definovať aj v <Directory /var/www/> Rewrite... </Directory> aj v <IfModule mode_rewrite>...
-
Linux teraz nemám k dispozícii, ale čistá inštalácia Apache 2.2.25 + PHP 5.3.27 na Win 7 s touto konfiguráciou funguje v pohode (oproti tvojej verzii som tam iba pridal RewriteBase):
httpd.conf (pridané na koniec súboru):
LoadModule php5_module "c:/php/php5apache2_2.dll"
AddHandler application/x-httpd-php .php
PHPIniDir "C:/php"
LoadModule rewrite_module modules/mod_rewrite.so
<Directory "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
Obsah "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs":
|- test
|- .htaccess
|- index.php
|- stranka.php
Obsah test/.htaccess:
RewriteBase /test
RewriteEngine on
RewriteRule ^index.php$ stranka.php
Obsah test/index.php:
<?php echo "index.php"; ?>
Obsah test/stranka.php:
<?php echo "stranka.php"; ?>
Do prehliadača dám http://localhost/test/index.php a vypíše sa mi "stranka.php".
Skontroloval by som:
1. Či si ten AllowOverride v <Directory> niekde inde neprepíšeš, príp. či sa ti neprepíše tým, že tam máš trebárs Include nejaka-dalsia-konfiguracia.conf.
2. Ak máš tú adresárovú štruktúru viacúrovňovú, napr. X/Y/Z a zapínaš ten AllowOverride pre X, tak si over, že ho potom niekde nevypínaš pre adresár X/Y, príp. X/Y/Z.
3. Ak nefunguje ani tak, tak by som ešte raz skontroloval práva na čítanie z FS. Samozrejme, každá zmena konfigurácie potrebuje reštart Apache. A samozrejme skontrolovať Apache log.
4. Ešte sa pozri, či nemáš niekde nejaký Rewrite, ktorým to na začiatku posielaš úplne niekam preč (kvôli tomu by to napr. vôbec nemuselo vliezť do tých tvojich adresárov).
5. Aby ti v .htaccess fungoval rewrite, tak musíš mať povolený FollowSymLinks (v ukážke máš), len si daj bacha na to, že to môžeš mať trebárs povolené pre Directory ale zakázané pre Location (a vezme sa nastavenie z Location) - viď mergovanie sekcií (http://httpd.apache.org/docs/current/sections.html#merging).
Čo sa týka nefunkčnosti mod_rewrite s tými 2 príkladmi, tak keďže si to dával priamo do apache2.conf, tak ti to fungovať nebude, lebo tam tá URL v RewriteRule vždy začína na lomítko (na rozdiel od .htaccess, kde nikdy nezačína na lomítko), t.j. v apache2.conf by ti malo zabrať toto: RewriteEngine on
RewriteRule ^/index.php$ /stranka.xxx
-
skontrolujte si v konfiguracnom subore apache riadok
AccessFileName .htaccess
Toto tam musi byt.
-
Uf, tak nakoniec som to po dlhej dobe spojazdnil :) fakt diki moc, problém bol naozaj v konfigurácií, naspodu apache2.conf bol include sites-enabled/
a ten priečinok obsahoval nastavenie pre directories *80 a mali nastavené AllowOverride None. Takže keď som si v apache2.conf aj nastavil directory tak nastavilo podla toho priloženého súboru.