.htaccess in mod_rewrite

Živjo,

skozi celoten podaljšan vikend sem sem ubadal s mod_rewrite, glede na to da sem samouk pri teh stvareh bi potreboval vašo pomoč oz. nasvet.

Uporabljam
Apache 2 (2.2.22)
PHP 5.4.28-1~dotdeb.1
OS: Debian

Ko zaženem phpinfo mi pokaže da je modul mod_rewrite uspešno nameščen.

V ssh ko sem nameščal mod_rewrite mi je prikazalo to, je to vredu ali ne?

Po tem ukazu sem tudi restartal apache server

Moj .htaccess file pa je sledeči:

Options -Indexes
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index\.
RewriteCond %{REQUEST_URI} !^/$

RewriteRule ^([^/]*)$ /?page=$1 [L,QSA]
RewriteRule ^([^-]*)/([^-]*)/$ /?page=$1&act=$2 [QSA,L]

RewriteRule ^rss/([^/]*)$ /?page=rss&cat=$1 [L]
RewriteRule ^account/([0-9]+)$ /?page=account&next=$1 [QSA,L]

Problem je v tem, da mi vrže vedno 404 error. Sedaj me zanima, če bi mi kdo znal pomagati/svetovati kje sem naredil napako.

14 odgovorov

404 je cool napaka... če bi bil 500 bi bil problem z konfiguracijo ali htaccessom. 404 pa je samo to da "stran ni bila najdena", torej slab rewrite delaš... Na prvo oko, manjka ti skripta ki naj se izvede?
Npr.
RewriteRule ^([^-])/([^-])/$ /index.php?page=$1&act=$2 [QSA,L]

1

Skripto, nekaj v zvezi s tem imam napisano v PHPju če misliš tako skripto. Sam .htaccess file pa je zagotovo pravilno napisan ali bi ga tudi moral kaj spremeniti, ker koliko sem gledal po googlu nekateri priporočajo razne stvari kot so: Options Indexes FollowSymLinks MultiViews in AllowOverride AuthConfig FileInfo Indexes Limit Options=All, MultiViews

Edit:
še to recimo prvo (home page) stran pri prikaže normalno če kliknem recimo zavihek RSS pa potem dobim ta 404 Error. Samo za info če kaj morebiti pomaga

kako imaš nastavljen default document v confu (ali pa htaccessu)?

1

Upam da si mislil ta default ki se nahaja pod sites-available

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName ImeMojeDomene.net
    ServerAlias ImeMojeDomene.net www.ImeMojeDomene.net
    DocumentRoot /var/www
    <Directory />
        Options FollowSymLinks
        AllowOverride All
    </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 All
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

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

    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Poskušaj tako, kot je napisal SlimDeluxe

SlimDeluxe:
RewriteRule ^([^-])/([^-])/$ /index.php?page=$1&act=$2 [QSA,L]

Se pravi da v rule obvezno navedeš tudi ime fajla

@kelvan: hvala za dodatno razlago. Sem poizkusil vendar neuspešno še vedno mi javla 404 error.

Najprej še enkrat preveri pravice na tej mapi in vseh fajlih v njej :)

Potem pa še:
Options FollowSymLinks
AllowOverride All
DirectoryIndex index.php

Zdej glede na to, da je OS Debian... če ne gre za default sajt - a si naredil nov sajt v /etc/apache2/sites-available in ga potem enejblal z a2ensite? V tem primeru bo config za specifičen sajt v tej mapi.
Večino informacij boš našel tule

1

Probaj en osnovni rewrite:

RewriteEngine On
RewriteBase /
RewriteRule ^(.*)$ index.php?test=$1

V RewriteBase moraš imeti relativno pot, če imaš skripto v podmapi in ne v vhost rootu

V index.php pa:

<?php
var_dump($_GET['test']);
1

@kelvan: bom preveril danes v popoldanskem času pa potem javim.
@SlimDeluxe: tukaj pa mi javi NULL.

Zadevo imam v root mapi (var/www)

Torej če imaš web root: http://test.local/ bi z obiskom http://test.local/blah moral var_dump izpisati "blah"

1