.htaccess in mod_rewrite
3 naročniki
3 naročniki
Ž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]
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
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
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
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']);
@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"