koyan Δημοσ. 15 Απριλίου 2005 Δημοσ. 15 Απριλίου 2005 Καλησπέρα, Σε μία διαφορετική τεχνολογία που χρησιμοποιώ (openACS) μπορεί ο προγραμματιστής να ρυθμίσει τον request processor ώστε άν το url δεν οδηγεί σε συγκεκριμένο αρχείο, να τρέχει κάποιο άλλο συγκεκριμένο script (το οποίο σερβίρει δυναμικά περιεχόμενο). Αυτό έχει ώς αποτέλεσμα, αναλύωντας το url να μπορούμε να σερβίρουμε διαφορετικές σελίδες, χωρίς όμως ο χρήστης να βλέπει ποτέ query strings. Υπάρχει τρόπος να το κάνει κάποιος αυτό χρησιμοποιόντας apache και php? Σας ευχαριστώ, Koyan
GrMikeD Δημοσ. 16 Απριλίου 2005 Δημοσ. 16 Απριλίου 2005 isws ennoeis na steileis tis parametrous me tin methodo POST etsi wste na min fainontai query strings sto url. Ean nai, bebaiws upostirizetai apo kathe texnologia gia dunamikes selides internet, opws kai i PHP. Sto site tis php exei polla resources gia na psakseis kai na breis auto pou thes: http://www.php.net
koyan Δημοσ. 16 Απριλίου 2005 Μέλος Δημοσ. 16 Απριλίου 2005 Δεν εννοω αυτό. Στην openacs δεν στέλνεις καθόλου query strings. Και δεν μιλάω για όταν κάνεις submit μια φόρμα. Τότε είσαι υποχρεωμένος να στείλεις παραμέτρους έτσι κι αλλιώς. Μιλάω για σελίδες στις οποίες φτάνεις μέσω links. Παράδειγμα: η συγκεκριμένη σελίδα που είμαστε τώρα έχει url: http://www.insomnia.gr/vb3/showthread.php?t=106887 Μία σελίδα με την τεχνολογία που λέω εγώ είναι αυτή: http://www.greenpeace.org/international/news/japan-doubles-whale-quota Στο παραπάνω url απο την άλλη: Στον server δεν υπάρχει κάνενα αρχείο με το όνομα japan-doubles-whale-quota. Δεν υπάρχει κάν directory "news". O request processor, αφού δει ότι δεν υπάρχει τέτοιο αρχείο αναλύει (με δικό μας script) το Url, και βλέπει αν αντιστοιχεί σε κάποιες παραμέτρους: το script αφού δεί ότι έχω αντιστοιχήσει στην βάση τον τίτλο αυτό μέ κάποιο άρθρο, σερβίρει αυτό το άρθρο με την template που του αντιστοιχεί. Αυτό έχει ως αποτέλεσμα όμορφα urls, χωρίς query strings τα οποία έχουν καλύτερο rating στις ψαχνομηχανές. Δεδομένου ότι δεν μπορώ να χρησιμοποιήσω την τεχνολογία αυτή για όλους τους πελάτες μου, (κάποιοι ζητάν php για κατανοητούς δικούς τους λόγους) ψάχνω να βρώ αν αυτό γίνεται και στην php. Ευχαριστώ, Koyan
galanta Δημοσ. 16 Απριλίου 2005 Δημοσ. 16 Απριλίου 2005 Ενδιαφέρον θέμα, με έχει απασχολήσει κι εμένα. Στις φόρμες κάτι τέτοιο θα γινόταν απλά, με τη μέθοδο POST, αλλά όπως σωστά λες, τι γίνεται με τα links. Πιστεύω πως με λίγη ευρηματικότητα μπορείς να εφαρμόσεις το ίδιο. Εγώ το έχω κάνει για ένα project που ετοιμάζω και δε βλέπω να υπάρχει κάποιο πρόβλημα μέχρι στιγμής, αν και ορισμένες φορές είναι μεγάλη η ανάγκη μου να περάσω ό,τι παραμέτρους θέλω μέσω του URL. Αυτό που κάνω είναι να "χτίζω" το URL από τις τιμές που έχουν διάφορα πεδία σε μια βάση δεδομένων τα οποία αφορούν το URL. Π.χ αν θέλω να οδηγώ στη σελίδα ενός προϊόντος, αντί το link να είναι /products.php?id=4 μπορεί να είναι /products/amd3000 με το φάκελο products να μην υπάρχει (ούτε και τον amd3000) αλλά το amd3000 να είναι η τιμή του πεδίου products.name στη βάση δεδομένων. Με βάση τα γνωστά και τετριμμένα αυτό είναι ένα 404 response από το server. Αυτά τα "σφάλματα" ως γνωστόν μπορείς να τα διαχειριστείς όπως θέλεις μέσω του apache. (φαντάζομαι και σε άλλους server) Έχεις δηλαδή ένα script που δέχεται το URL του σφάλματος, το αναλύει εύκολα μέσω PHP και προβάλλει το αντίστοιχο προϊόν. Η λύση αυτή δουλεύει καλά σε μένα, αλλά μάλλον δε λύνει το πρόβλημα του να κρατήσεις το "λανθασμένο" URL σαν σωστό στη γραμμή διεύθυνσης, ώστε να γίνεται και bookmarked. Ίσως σκεφτώ κάτι και γι' αυτό αργότερα.
koyan Δημοσ. 16 Απριλίου 2005 Μέλος Δημοσ. 16 Απριλίου 2005 Με βάση τα γνωστά και τετριμμένα αυτό είναι ένα 404 response από το server. Αυτά τα "σφάλματα" ως γνωστόν μπορείς να τα διαχειριστείς όπως θέλεις μέσω του apache. (φαντάζομαι και σε άλλους server) Έχεις δηλαδή ένα script που δέχεται το URL του σφάλματος' date=' το αναλύει εύκολα μέσω PHP και προβάλλει το αντίστοιχο προϊόν. Η λύση αυτή δουλεύει καλά σε μένα, αλλά μάλλον δε λύνει το πρόβλημα του να κρατήσεις το "λανθασμένο" URL σαν σωστό στη γραμμή διεύθυνσης, ώστε να γίνεται και bookmarked. [/quote'] Σχετικά με αυτό που λές: εκεί που μου κανουν Hosting, στο 404 error δεν σου αλλάζει το url στον browser, απλά σου σερβίρει αυτό που του λέει το error_document. Παράδειγμα: http://www.fisheye.gr/jdfsafsdaf Όμως: τα documents αυτά είναι static html. Δοκίμασα να βάλω Php μέσα, αλλά δεν την κάνει process αλλά την εμφανίζει ως comments μέσα στο html (ξαναδές το παραπάνω url). Πρόβλημα: δεν διαχειρίζομαι τον production server εγώ, και αμφιβάλω άν θα δεχόντουσαν ποτέ αυτοί που μου κάνουν Hosting να πειράξουν τον apache (η κλασική τους απάντηση: άν γίνεται μέσω του πάνελ έχει καλώς, αλλιώς δεν μπορούμε να κάνουμε τίποτα)... GAMOTO... αυτό είναι existing functionality στην openACS... Ποιός μας προσφέρει έναν server να εγκαταστήσουμε AolServer και OpenACS?
galanta Δημοσ. 16 Απριλίου 2005 Δημοσ. 16 Απριλίου 2005 Ναι, αν δεν μπορείς να επέμβεις στις ρυθμίσεις του apache μάλλον δεν μπορείς να ακολουθήσεις αυτό που σου πρότεινα. Υπάρχουν κάποιες μεταβλητές του Apache που θα βοηθούσαν, αυτές με το πρόθεμα REDIRECT_. Εννοείται βέβαια ότι μπορείς σαν ErrorDocument να καλείς php αρχείο, αλλά ίσως να μη δίνουν αυτή τη δυνατότητα οι εταιρείες hosting. Αν πάντως αυτό που σε ενδιαφέρει είναι να μη φαίνονται οι μεταβλητές στο URL, μια άλλη σκέψη που είχα κάνει στην αρχή, και αν τη δουλέψεις λίγο είμαι βέβαιος πως θα σε βοηθήσει, είναι να περνάς τις μεταβλητές κανονικά μέσω link αλλά τουλάχιστον να μη φαίνονται στη μπάρα διεύθυνσης. Γράφεις κανονικά το σύνδεσμο στη σελίδα, π.χ products.php?id=5. To products.php δεν παράγει καθόλου περιεχόμενο, απλώς θέτει τις μεταβλητές GET σε κάποιες μεταβλητές SESSION, π.χ _SESSION['product_id']=$_GET['id'] και μετά με την εντολή header() πας εκεί που θέλεις, χρησιμοποιώντας τις μεταβλητές που έχεις αποθηκεύσει στο μητρείο _SESSION.
koyan Δημοσ. 16 Απριλίου 2005 Μέλος Δημοσ. 16 Απριλίου 2005 Αν πάντως αυτό που σε ενδιαφέρει είναι να μη φαίνονται οι μεταβλητές στο URL, μια άλλη σκέψη που είχα κάνει στην αρχή, και αν τη δουλέψεις λίγο είμαι βέβαιος πως θα σε βοηθήσει, είναι να περνάς τις μεταβλητές κανονικά μέσω link αλλά τουλάχιστον να μη φαίνονται στη μπάρα διεύθυνσης. Δεν είναι αυτό όμως που θέλω. Έτσι όλες οι σελίδες μου θα φαίνονται να έχουν το ίδιο url (πολύ πολύ κακό για τα ψαχτήρια). Εγώ θέλω η κάθε δυναμική μου σελίδα να έχει το δικό της μοναδικό Url...
galanta Δημοσ. 16 Απριλίου 2005 Δημοσ. 16 Απριλίου 2005 Το κατάλαβα...λυπάμαι που δεν μπορώ να σε βοηθήσω. Μπορείς να μας πεις με δυο λόγια για το openacs? Γράφεις σε κάποια συγκεκριμένη γλώσσα και ποια είναι αυτή; Υπάρχει και το google βέβαια αλλά θα ήθελα να ξέρω 2-3 πράγματα πριν διαβάσω. Σε ευχαριστώ.
koyan Δημοσ. 16 Απριλίου 2005 Μέλος Δημοσ. 16 Απριλίου 2005 Σχετικά με το openAcs. Ιστορικά χρησιμοοιεί τον server AolServer. Τελευταία ακούω ότι το έχουν κάνει να δουλεύει με Apache αλλά δεν το έχω δεί προσωπικά. Γλώσσα: Tcl (scripting language, όπου τα πάντα είναι strings, με μεγάλη έμφαση στα lists) Βάση: Αρχικά και για πολλά χρόνια χρησιμοποιούσε μόνο oracle αλλά εδώ και 2 χρόνια χρησιμοποιεί postgres Πλεονεκτήματα (δικιά μου άποψη): α) εκπληκτικό API, όπου δυναμικά γίνεται αυτόματα ανανέωση όλων των functions που υπάρχουν στο σύστημά σου, περιλαμβανομένων και αυτών που δημιουργείς εσύ. β) Διαχωρισμός του προγραμματιστικού κώδικα από τα design templates το οποίο κάνει τον προγραμματισμό και την δουλειά του designer πολύ πολύ πιο έυκολα γ) πολλα, πολλα, πολλά έτοιμα πακέτα τα οποία αναλαμβάνουν πολλές λειτουργίες (user authentication, emails, bounce managment etc). Μειονεκτήματα: α) πολύ λίγη χρήση της στην Ελλάδα (κακό όταν είσαι προγραμματιστής σε αυτό, ή όταν θέλεις να βρείς που να κάνεις hosting). β) μέχρι πρόσφατα δούλευε μόνο με oracle γ) η εγκατάσταση του server δεν είναι εύκολη σε Non-admins (αντίθετα με τον apache-php-mysql, που ακόμα και εγώ ο άσχετος έβαλα στα windows μου για να δουλεύω) δ) Δεν έχω ακούσει ποτέ να γίνεται εγκατάσταση σε windows.
mkst Δημοσ. 17 Απριλίου 2005 Δημοσ. 17 Απριλίου 2005 Παιδια, εχω την εντυπωση πως αυτο που ζητατε ειναι το mod_rewrite του apache. Και χρησιμοποιείται κατά κόρων από διάφορα sites για λόγους SEO (οι search engines δεν γουσταρουν τα δυναμικα urls με '?' και '&') Έτσι αντί να έχεις το http://www.mysite.com/index.php?item=1¶m=2 εχεις αυτό: http://www.mysite.com/anyword1_2.htm ή http://www.mysite.com/mypage-1-2 ή ότι άλλο θέλεις Στον apache λειτουργει μέσω του .htaccess με την βοήθεια regexp conditions. Ρίξτε μιά ματιά εδω: http://www.phpfreaks.com/tutorials/23/0.php
koyan Δημοσ. 17 Απριλίου 2005 Μέλος Δημοσ. 17 Απριλίου 2005 Τέλειο. Όχι ακριβώς αυτό που ήθελα, αλλά έχει το ίδιο αποτέλεσμα. Ευχαριστώ. Koyan
koyan Δημοσ. 18 Ιουλίου 2005 Μέλος Δημοσ. 18 Ιουλίου 2005 Λοιπόν, βρήκα και άλλη λύση, ακόμα πιο εύκολη: Δείτε την παρακάτω διεύθυνση: http://www.dianthos.net/friendlyurl.php/page/12/category/14 ο κώδικας που χρησιμοποιώ σε αυτήν είναι ο εξής: >$page = ''; $category = ''; $data = explode("/",$_SERVER['PATH_INFO']); $page = $data[2]; $category = $data[4]; echo 'The page is '. $page. '<br>'; echo 'The category is '. $category. '<br>'; Για να δοκιμάσετε πως δουλεύει αλλάξτε το 12 και το 14 σε άλλες τιμές, και κάλέστε το Link. Μετά από αυτό πρέπει απλά να αλλάξω τον τρόπο που δημιουργώ τα διάφορα links μέσα στις εφαρμογές μου... Comments anyone? Koyan
Dikemou Δημοσ. 18 Ιουλίου 2005 Δημοσ. 18 Ιουλίου 2005 akrivos auta ekana ki ego xthes olo to bradi! prospathousa na ftiakso pio "friendly" urls me to RedirectMatch tou apache sto .htaccess to opoio douleue mia xara, kai eukolo itan, ektos tou oti epemene na "metafrazei" to "?" se "%3F" sti URL. Telika kateliksa sto RewriteRule to opoio brisko oti einai kapos pio diskolo sti xrisi tou omos kai anagastika na simbibasto se kana 2 simeia :/
koyan Δημοσ. 19 Ιουλίου 2005 Μέλος Δημοσ. 19 Ιουλίου 2005 Λοιπόν, μου πήρε δύο ώρες, και ήδη άλλαξα ένα site σε friendly urls: http://www.pavlakisdolci.gr/productsgrouped.php/groupid/27 Πληροφορίες για όποιον ενδιαφέρεται: Το σύστημα αυτό ψιλόπηδάει τα relative paths (τα οποία θέλω να χρησιμοποιώ γιατί έχω διαφορετικά development και production περιβάλλοντα) Για να το λύσω, έφτιαξα ένα μικρό include με τον εξής κώδικα το οποίο καλώ στις σελίδες που θέλω: > $basepath = '/mybasedirectory'; $selfpath = $basepath. '/'. basename($_SERVER['SCRIPT_FILENAME']); (εναλλάκτικά μπορείτε να το βάλετε σε κάποιο config.php άμα χρησιμοποιήτε) Το $selfpath το χρησιμοποιώ αντί του PHP_SELF και το $basepath το χρησιμοποιώ αντί για relative paths. Επίσης για θέμα ασφάλειας χρησιμοποιώ το εξής: > if ($data[1]='groupid' && is_numeric($data[2])) { $groupid = $data[2]; //κώδικας ακολουθεί... . . . } else { echo "Υπάρχει κάποιο λάθος στην διεύθυνση. Παρακαλώ ελέγξτε το και ξαναπροσπαθήστε."; } Το παραπάνω, σε συνδιασμό με το register_globlas =false μου εξασφαλίζει ότι κανένας δεν θα μου περάσει περίεργα strings στα queries μου. Άν κάποιος έχει απορίες, ρωτήστε... Koyan
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.