ugrás a tartalomhoz

mod_rewrite nem működik

nemalevi · 2016. Május. 27. (P), 19.08
Az a helyzet, hogy teljesen hülye vagyok a témához, de gondoltam biztos nem lesz olyan bonyolult átfésülni kicsit a linkeimet pofásabbra, elvégre léteznek ilyen mod_rewrite generátor oldalak is.
Ez működik:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^oldal\.co.uk$ [NC]          
RewriteRule ^(.*)$ http://www.oldal.co.uk/$1 [R=301,L]  //eléteszi a www. előtagot
RewriteCond %{THE_REQUEST} ^.*/index.php
RewriteRule ^(.*)index.php$ http://www.oldal.co.uk/$1 [R=301,L] //levágja az index.php-t


Viszont sehogy se tudom a dinamikus url-eket átalakitani, mert vagy semmit nem csinál vagy Internal Server Error-t ír ki hibaüzenetként.
RewriteRule ^/([^/]*)\.html$ /valami.php?p=$1 [L]
De mondjuk nem is ezt akarnám, hanem a www.oldal.co.uk/valami.php?p=semmi.nemsemmi helyett www.oldal.co.uk/semmi/nemsemmi
 
1

Napló

Hidvégi Gábor · 2016. Május. 27. (P), 20.59
Ha bekapcsolod a naplózást, ki tudod deríteni, mi történik pontosan, amikor egy url-t megnyitnak a böngészőben, és akkor tudod hangolni a fenti parancsokat.
2

pontosabban

Pepita · 2016. Május. 28. (Szo), 07.36
Légyszi írj le egy rosszat, hogy ez az 500 error: ...
Ezen kívül jó lenne egy Apache verzió, csak a .htaccess tartalmából gondolom, hogy egyáltalán Apache szerverről van szó.
A "gugli barát" url-t megoldani szerintem PHP - s routing - okosság is kell, úgyhogy kellene egy fw verzió is, ha nincs (fw), akkor az index.php, és hogy mi az egyéb működési logika.
5

redirection

nemalevi · 2016. Jún. 13. (H), 14.56
Nem tudom, hogy erre gondoltál-e: Apache 2.0 Handler
Az utolsó hozzászolásban leírtam, hogy nagyjából már működik a dolog, létre tudom hozni az url-t csak nem tudom átírányítani, mert végtelen redirection ciklusba keveredik. Ez csak a dinamikus url-nél van, sima php file-nál működik a dolog.
Próbáltam headerrel is átirányítani, de ott is ugyanazt akarja megnyitogatni újra és újra.
6

logika

Pepita · 2016. Jún. 13. (H), 18.20
Arra gondoltam, hogy válaszolsz az összes kérdésre (mi a konkrét 500 error a log ban, milyen request re, és tovább).
Nincs nagyjából műxik. Ez boolean, igen vagy nem. Tehát még nem.
Menj végig az összes kérdésemen, válaszolj rá, + amennyire csak tudod, specifikáld pontosan a feladatot, példa url ekkel, és leírva, hogy ezekkel mit szeretnél működésben elérni.
Úgy tűnik, hogy nagyon kevered a rewrite és redirect fogalmakat. Ezért fontos, hogy megválaszold a kérdéseket, akkor fogok tudni segíteni.
7

pistike

nemalevi · 2016. Jún. 13. (H), 20.28
1. Kerestem a logot, de nem tudom hol van.
2. Fogalmam sincs mi az az fw verzió, a google szerint valami firmware.
Én azt hittem először, hogy csak simán átírom az url-eket és működni fognak, de nem. Aztán észrevettem, hogyha átírom attól még át kell irányítani őket, mert magától nem változik meg a link, csak lesz belőle még egy oldal.
De ha megtudom, hol lehet a logot követni az lehet nagy segítség lesz.
8

Ki a Pistike? :)

Pepita · 2016. Jún. 13. (H), 21.09
1. Az Apache könyvtár ban keress olyasmit, hogy httpd.conf, abból kell kikeresni, hova logol. Bővebben legfeljebb holnap tudok segíteni.
2. Framework. Ezek szerint nem használtál semmilyet, akkor szerintem tudnád. Így az index.php kellene, illetve jelenleg mi a vezérlés (mi és hol dönti el, és mi alapján, hogy include ('valami.php'); ). Ha csak magukban futó szkriptek, akkor elég nehéz lesz. Reggel ha lesz kicsi idő, rá nézek.

Szerk.
Ha sikerül, a példádon megmutatom, mi a rewrite, és hogy nem kell redirect.
Link meg pláne, de szerintem itt url re gondolsz.

Szerk 2
Valahol tedd elérhető a jelenlegi cuccot pl zip ben. Itt szerintem túl sok kód lenne.
9

Én vagyok a Pistike

nemalevi · 2016. Jún. 13. (H), 21.14
Nincs framework, vannak a php file-ok, és include-olva van a header, meg a footer.
Kösz a segítséget előre is!
10

Nekem a Pistike az, aki

Pepita · 2016. Jún. 14. (K), 17.20
azt mondogatja, hogy "majd azt én tudom", "én értek hozzá, más nem", stb, közben követi el a nagyobbnál nagyobb hibákat, mert lusta tanulni.
Én úgy látom, te akarsz tanulni, és jól akarod csinálni, és - hála Istennek - nem vagy néma Levente sem. :)
Sajnos ma már nem maradt időm átnézni a kódod, de letöltöttem...
Így látatlanba annyit, hogy az index.php-t kéne úgy "faragni", hogy csak config és routing feladata legyen, aztán majd behúzkodja azt a "php file-ok", amiket kell.
.htaccess meg annyit csinál majd, hogy majdnem minden query-t (pl a css, js, kép- kéréseket nem) szépen odaad az index.php-nek.
14

Pe-pi-NA?

nemalevi · 2016. Jún. 20. (H), 11.25
Na mi az, ennyire szörnyű? :)
15

Ja nem láttam, hogy lent

nemalevi · 2016. Jún. 20. (H), 15.05
Ja nem láttam, hogy lent írtál.
3

Talán itt találsz némi

rrd · 2016. Május. 29. (V), 14.41
Talán itt találsz némi támpontot: http://webmania.cc/url-atirasok-apache-mod-rewrite/
4

update

nemalevi · 2016. Jún. 13. (H), 12.22
Köszönöm mindenkinek a hozzászólást. Egyelőre még mindig szerencsétlenkedek.
Így sikerült megoldani a dolgot, nem tudom, hogy helyes-e:
RewriteRule ^get-a-quote$ quote.php [NC,L]       //átírja az url-t
RewriteCond %{THE_REQUEST} ^.*/quote.php
RewriteRule ^(.*)quote.php$ http://www.gentlevanremovals.co.uk/get-a-quote [R=301,L] //átirányítják az url-t


Viszont ugyanez nem működik dinamikus url-nél, csak külön-külön.

RewriteRule ^removals/oxford$ removals.php?p=removals.oxford [NC,L] //ez átírja ugyanúgy

RewriteCond %{QUERY_STRING} p=removals.oxford
RewriteRule ^removals\.php$ /removals/oxford? [L,R=301]  //ez átirányítja ugyanúgy

A kettő viszont együtt nem működik.
11

Eddig

Pepita · 2016. Jún. 15. (Sze), 09.59
Az eddigi "kódbázisból" annyit látok, hogy egy eléggé hatalmas káosz uralkodik a site-on.
Először is rendet kéne tenni (docroot-ból kivenni az összes js-t, képet, stb külön könyvtárba, törölni az olyanokat, mint phpinfo.php /direkt megmutatod mindenkinek, hogy mi a szerver config???/, stb).
Az index.php szerepe legyen pusztán
- az alap config
- db kapcsolat (külön class-al v. script-el)
- routing (eldönti url alapján, hogy mi a következő "php fájl", beállít átadandó paramétereket)
- session kezelés.

Ebből a routingra fogok csinálni egy egyszerű példát, amint lesz egy kis időm. De ennek feltétele lesz, hogy rendszerezve vannak a különféle fájlok, nem úgy össze-vissza, mint most.

+ javaslat: gyomláld ki az összes functions.php-t és script.js-t...
12

sorry

Pepita · 2016. Jún. 16. (Cs), 19.14
A helyzet az, hogy reggel rittyentettem egy kis egyszerű, de használható "routing" ot, de nem maradt időm leírni itt.
Kis türelmet kérek.
13

Kód

Pepita · 2016. Jún. 17. (P), 16.29
Lett pár darab, szemléltetni szerintem jó lesz.
Docroot: "./".

./.htaccess :
RewriteBase /
Options -Indexes

# A public könyvtárban soha ne legyen php kód!
<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteCond $1 !^(index\.php|public|favicon\.ico|robots\.txt|google_webmestereszkozok\.html)
  RewriteRule ^(.*)$ index.php?$1 [L]
</IfModule>
Itt a lényeg a 7. sor, ott van felsorolva, hogy milyen request az, amit nem kell az index.php-nak kezelni. A public könyvtárba mehetnek pl a js, css, képek, stb.
Tegyünk is bele valamit:

./public/test.css:
h1 {
    color: pink;
}
Nézzük a ./index.php-t, ez intézi a végrehajtandó feladat kiválasztását:
<?php

define('APPPATH', dirname(__FILE__) . '/application/'); // alkalmazás könyvtár

$Info   = [];
$Info['QueryString']    = $_SERVER['QUERY_STRING']; // Ez jött a BaseUrl után
$Info['Segments']       = explode('/', $Info['QueryString']); // Szétszedjük szegmensekre

if (empty($Info['Segments'])) {
    // Default page, nincs paraméter
} else {
    // Mehet egy kis matek a paraméterekkel
    if (file_exists(APPPATH . $Info['Segments'][0] . '.php')) { // ha van ilyen 'php fájl',
        require_once(APPPATH . $Info['Segments'][0] . '.php'); // behúzzuk
        if (isset($Info['Segments'][1]) && function_exists($Info['Segments'][1])) { // van függvénynév és létezik?
            $FunctionParams = $Info['Segments'];
            unset($FunctionParams[0], $FunctionParams[1]);
            $Info['FunctionResult'] = call_user_func($Info['Segments'][1], $FunctionParams);
        }
    }
}

?>
<!DOCTYPE html>
<html>
<head>
    <title>Routing test</title>
    <link rel="stylesheet" type="text/css" href="/public/test.css">
</head>
<body>
    <h1>Routing test</h1>
    <p>Hello friend, datas of your request:</p>
    <pre><?php print_r($Info); ?></pre>
    <p>Az alábbi sor egy olyan infó, amit publikus oldalon soha ne írj ki... :)</p>
    <p><?php echo(APPPATH); ?></p>
</body>
</html>
Most a default page-re nincs semmi, hanem önmaga, szebb úgy, ha nincs itt semennyi html, csak logika. De elsőre megérteni egyszerűbb így.

Csináljunk egy pici logikát is, ha már a 13 - 18. sorban meg tudunk találni egy script-et a paraméterek alapján,
./application/test.php :
<?php

$Info['PageText']   = 'test.php be lett húzva';

function valami() {
    $Params = func_get_arg(0); // fv paraméterek
    $ReturnText = 'Függvény paraméterek: ' .
                  print_r($Params, true);

    return $ReturnText;
}

Ahhoz, hogy ki tudd próbálni, egy "szép" url:
http://localhost/test/valami/12/miafene/walaki
Itt ugye a localhost a domain, utána szép sorban a paraméterek.

Kimenet:
Array
(
    [QueryString] => test/valami/12/miafene/walaki
    [Segments] => Array
        (
            [0] => test
            [1] => valami
            [2] => 12
            [3] => miafene
            [4] => walaki
        )

    [PageText] => test.php be lett húzva
    [FunctionResult] => Függvény paraméterek: Array
(
    [2] => 12
    [3] => miafene
    [4] => walaki
)

)