Htacces -ben nem működik az url átalakítás
Sziasztok
Olyan problémám lenne, hogy szeretnék keresőbarát linkeket kialakítani az oldalon de nem bírtam rávenni a .htacces-t a működésre. A beállítások működnek, mert a 404-es hiba oldalt is kezeli, meg a RewriteCond-is kihadja a létező fájlokat.
De az oldalak url-jét nem kezeli. Mindig átdob a 404-es oldalra.
Itt csak a news oldallal próbálkoztam.
A cél az lenne, hogy eből: http://127.0.0.1/Asalite/news/2014/8
Ez lenne: http://127.0.0.1/Asalite/news.php??par1=$1&par2=$2
.htaccesFájl szerkezet:
http://127.0.0.1/Asalite/index.php
http://127.0.0.1/Asalite/news.php
http://127.0.0.1/Asalite/css/style.css
http://127.0.0.1/Asalite/image/
Olvastam , hogy nem jó ha az url és a fájlnév megegyezik.
pl: http://127.0.0.1/Asalite/news/1 , miközben van news.php.
Kiprobáltam így: http://127.0.0.1/Asalite/hir/1
Így meghagyta az url-t és betöltötte a news.php-t, De a benne lévő összes képet nem , és a css-t sem találta meg.
GET: Array( [par1] => news.php)
REQUEST_URI: /Asalite/hir/1
■ Olyan problémám lenne, hogy szeretnék keresőbarát linkeket kialakítani az oldalon de nem bírtam rávenni a .htacces-t a működésre. A beállítások működnek, mert a 404-es hiba oldalt is kezeli, meg a RewriteCond-is kihadja a létező fájlokat.
De az oldalak url-jét nem kezeli. Mindig átdob a 404-es oldalra.
Itt csak a news oldallal próbálkoztam.
A cél az lenne, hogy eből: http://127.0.0.1/Asalite/news/2014/8
Ez lenne: http://127.0.0.1/Asalite/news.php??par1=$1&par2=$2
.htacces
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
RewriteBase /Asalite/
ErrorDocument 404 /Asalite/404/index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^news\.php$ - [L]
RewriteRule ^(.+)/(.+)/(.+)/?$ news.php?par1=$1&par2=$2&par3=$3 [L]
RewriteRule ^(.+)/(.+)/?$ news.php?par1=$1&par2=$2 [L]
RewriteRule ^(.+)/?$ news.php?par1=$1 [L]
</IfModule>
http://127.0.0.1/Asalite/index.php
http://127.0.0.1/Asalite/news.php
http://127.0.0.1/Asalite/css/style.css
http://127.0.0.1/Asalite/image/
Olvastam , hogy nem jó ha az url és a fájlnév megegyezik.
pl: http://127.0.0.1/Asalite/news/1 , miközben van news.php.
Kiprobáltam így: http://127.0.0.1/Asalite/hir/1
Így meghagyta az url-t és betöltötte a news.php-t, De a benne lévő összes képet nem , és a css-t sem találta meg.
GET: Array( [par1] => news.php)
REQUEST_URI: /Asalite/hir/1
Log
Hol találom?
A httpd.conf -ban? Kerestem de nem találtam.
LoadModule rewrite_module modules/mod_rewrite.so
bekapcsolva van.
Dokumentáció
Ezt olvasom már fél órája.
RewriteEngine On
RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 3
LogLevel alert rewrite:trace6
Elvileg ennyi elég, de a
oké de ezt hova kell írni????
És a második sorban lévő url nincs is nekem olyan fájl!!
Ha megnézed az első sort,
igen beírtam .htaccesbe
Nincs definiálva ilyen modul!
RewriteEngine On
#nálam itt található
RewriteLog "/apache/logs/error.txt"
RewriteLogLevel 3
LogLevel alert rewrite:trace6
Kiszedtem az egészet.
Ha kiveszem ezt:
#RewriteRule ^news\.php$ - [L]
Akkor működik, de akkor:
GET:Array( [par1] => news.php)
REQUEST_URI: /Asalite/hir
Ez miatt csinálja?
RewriteRule ^(.+)/?$ news.php?par1=$1 [L]
És jól jeleníti meg az oldalt!
De ha ezt írom be neki Asalite/hir/1
Beadja a news.php oldalt, de ellszálnak a képek és a css
Gondolkozz!
RewriteRule ^(.+)/?$ news.php?par1=$1 [L]
A következő sorban ezt találja: bármilyen karaktersorozat, aminek a végén lehet egy / jel. akarmi.css megfelel neki? Igen. Ezért meghívja a news.php?par1=akarmi.css -t az akarmi.css helyett.
De ez mind benne van a logfájlban.
Megoldás: a htaccess rewriterule-ban kivételeket kell kezelni bizonyos könyvtárakra és fájlokra. Elő az angollal és a keresővel!
DE nem ezt védi ki
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Ilyet már láttam párszor, de
A RewriteCond-ok csakis a
Én egyébként azt javaslom, ne a rewrite-ban akard paraméterekre szétválogatni az URL darabjait, hanem írjál egyetlen rule-t, és dobj mindent egyetlen PHP-fájlra (a RewriteCond-ok megtartásával, persze). Ott pedig használj valamilyen Router megoldást, sokkal rugalmasabb, könnyebben kereshetőek a hibák, és a jövőben könnyebben változtathatsz rajta.
Hogy hivatkozol a CSS-re és a képekre egyébként? Ha nem töltődnek be, akkor a böngésző inspectorában a Network/Hálózat fülön vizsgálhatod mi történik pontosan, így könnyű kiszúrni a hibákat.
Ezt szeretném elérni de ezek szerint nem jól álltam hozzá.
Tudnál példát írni?
A " http://127.0.0.1/Asalite/hir/1 " esetében http://127.0.0.1/Asalite/hir/css -ben keresi a css fájlt
[colorer=Apache
És ez hol ad át változót?
Ha megnézed az eredeti kérdésem láthatod, hogy mit akarok elérni!
A REQUEST_URI:-t látom
Jaja, csak közben
semmi gond
Akkor már nem.
Szóval itt nem alakítja át az
$_SERVER['REQUEST_URI']
-ban láthatod az eredeti URL-t. Ezt feldolgozod te magad, PHP-ben. Vannak rá kész megoldások, routerek, sokféle és néhány igen jó minőségű, én egy ilyet használnék.A statikus fájlaid elérése lehet, hogy nem fog működni, ha relatíve adod meg az elérést (pl. css/style.css). Pl. ha az aktuális oldal, amin a júzer áll, az a /news/15/replies/18, akkor egy css/style.css hivatkozást a böngésző értelemszerűen úgy fordítja le, hogy /news/15/replies/css/style.css, mivel relatívan adtad meg. Ezt láthatod a Network tabon is. Így nem fog működni. Meg kell adnod a "teljes" elérést, pl. PHP-ban letárolod a base url-t (általában simán /, nálad /Asalite/, ezt mondjuk konfigban állíthatóvá teszed, hogy mozgatható maradjon könnyen az oldal), és azt kiiratod minden hivatkozás elé, tehát a HTML-ben ez lesz: /Asalite/css/style.css.
Köszönöm
Tied a pont!!!
igen beírtam
Bocs, erre nem emlékeztem