ugrás a tartalomhoz

Htacces -ben nem működik az url átalakítás

cszlak · 2014. Szep. 11. (Cs), 10.11
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

.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>
Fá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
 
1

Log

Hidvégi Gábor · 2014. Szep. 11. (Cs), 10.19
Érdemes a rewrite logot bekapcsolni, a mértékét magasra állítani (emlékeim szerint 6 fölé), és ebből megnézni, mit csinál rosszul.
2

Hol találom?

cszlak · 2014. Szep. 11. (Cs), 10.37
Hol találom?
A httpd.conf -ban? Kerestem de nem találtam.

LoadModule rewrite_module modules/mod_rewrite.so

bekapcsolva van.
3

Dokumentáció

Hidvégi Gábor · 2014. Szep. 11. (Cs), 10.42
4

Ezt olvasom már fél órája.

cszlak · 2014. Szep. 11. (Cs), 10.52
Csak az nem derül ki az egészből, hogy hova kell írni ezt?

RewriteEngine On
RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 3
LogLevel alert rewrite:trace6
5

Elvileg ennyi elég, de a

Hidvégi Gábor · 2014. Szep. 11. (Cs), 11.01
Elvileg ennyi elég, de a RewriteLogLevelt magasabbra kell venni. Ha ez megvan, nyisd meg az url-t a böngészőben, majd nézd meg a logfájl végét, hogy mit csinál pontosan a motor.
6

oké de ezt hova kell írni????

cszlak · 2014. Szep. 11. (Cs), 11.08
oké de ezt hova kell írni????
És a második sorban lévő url nincs is nekem olyan fájl!!
7

Ha megnézed az első sort,

Hidvégi Gábor · 2014. Szep. 11. (Cs), 11.10
Ha megnézed az első sort, abból ki tudod találni, hogy hol láttál már hasonlót.
8

igen beírtam .htaccesbe

cszlak · 2014. Szep. 11. (Cs), 11.17
[Thu Sep 11 11:12:43.595451 2014] [core:alert] [pid 5344:tid 804] [client 127.0.0.1:60696] C:/Programozas/------Irland Website/Asalite/Weboldal/.htaccess: Invalid command 'RewriteLog', perhaps misspelled or defined by a module not included in the server configuration

Nincs definiálva ilyen modul!

RewriteEngine On
#nálam itt található
RewriteLog "/apache/logs/error.txt"
RewriteLogLevel 3
LogLevel alert rewrite:trace6
9

Kiszedtem az egészet.

cszlak · 2014. Szep. 11. (Cs), 11.25
Kiszedtem azt a log részt.

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
10

Gondolkozz!

Hidvégi Gábor · 2014. Szep. 11. (Cs), 11.54
RewriteRule ^news\.php$ - [L]
RewriteRule ^(.+)/?$ news.php?par1=$1 [L]
Mit csinál ez? Ha azt látja, hogy news.php, akkor meghívja ezt a php-t, és kilép a rewrite feldolgozó.

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!
12

DE nem ezt védi ki

cszlak · 2014. Szep. 11. (Cs), 12.06
DE nem ezt védi ki a :
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
13

Ilyet már láttam párszor, de

Hidvégi Gábor · 2014. Szep. 11. (Cs), 12.26
Ilyet már láttam párszor, de sosem jártam utána, mert nem volt rá szükségem. Ha így van, akkor jobbat nem tudok mondani az eddig szajkózott "nézd meg a logot"-nál, mert abból kiderül, hogy mi is történik pontosan.
15

A RewriteCond-ok csakis a

bamegakapa · 2014. Szep. 11. (Cs), 12.36
A RewriteCond-ok csakis a következő RewriteRule-ra vonatkoznak, a többire nem.

É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.
16

Ezt szeretném elérni de ezek szerint nem jól álltam hozzá.

cszlak · 2014. Szep. 11. (Cs), 12.42
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
17

[colorer=Apache

bamegakapa · 2014. Szep. 11. (Cs), 12.45
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* index.php [L,QSA]
18

És ez hol ad át változót?

cszlak · 2014. Szep. 11. (Cs), 12.47
É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
19

Jaja, csak közben

bamegakapa · 2014. Szep. 11. (Cs), 12.48
Jaja, csak közben szerkesztési nehézségeim voltak :D, és véletlenül elküldtem az egészet. Mindjárt írok egy értelmes választ.
20

semmi gond

cszlak · 2014. Szep. 11. (Cs), 12.54
Egy mappa mélységben működik is amit irtál, de több mappát írok pl: http://127.0.0.1/Asalite/hir/1
Akkor már nem.
21

Szóval itt nem alakítja át az

bamegakapa · 2014. Szep. 11. (Cs), 12.59
Szóval itt nem alakítja át az URL-t úgy, hogy query string legyen belőle, ez fölösleges lépés. Simán átirányítja a PHP-ra, ott pedig a $_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.
22

Köszönöm

cszlak · 2014. Szep. 11. (Cs), 20.26
Értem és köszönöm, most már működik.

Tied a pont!!!
11

igen beírtam

kuka · 2014. Szep. 11. (Cs), 12.04
igen beírtam .htaccesbe
Naplózással kapcsolatos dolgokat általában nem lehet .htaccess-ben állítani. Írja is a Hidvégi Gábor által javasolt dokumentáció:
Context: server config, virtual host
14

Bocs, erre nem emlékeztem

Hidvégi Gábor · 2014. Szep. 11. (Cs), 12.26
Bocs, erre nem emlékeztem (hogy .htaccess-ben nem működik).