rafinos Δημοσ. 10 Ιουλίου 2019 Δημοσ. 10 Ιουλίου 2019 (επεξεργασμένο) Γεια σας παιδιά! Έχω κάνει κάποιες ρυθμίσεις μέσω .htaccess αρχείου. Πιο συγκεκριμένα έχω κάνει αλλαγές ώστε το site να δέχεται seo friendly urls. RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php?path=$1 [NC,L,QSA] Δουλεύει κανονικά, αλλά σε περιπτώσεις που το url περιέχει κάποια get μεταβλητή τότε έχω θέμα. Μάλλον φταίει ο κώδικας με τον οποίο ελέγχο τo περιεχόμενο του url. Για παράδειγμα αυτός είναι κάπως έτσι: $browser_link = $_SERVER["REQUEST_URI"]; if($browser_link === "/blog"){ $isBlog = true; }else{ $isBlog = false; } if(strpos($browser_link, "blog/article/") !== false){ $isArticle = true; }else{ $isArticle = false; } Αλλά εκτός από αυτό τα δεδομένα κάθε υποσελίδας είναι αποθηκευμένα σε μια json βάση και μαζί με αυτά γίνεται αντιστοίχηση σε κάποιο url της μορφής domain.com/page/somepage. Μπορώ κάπως να λύσω το πρόβλημα με τις get μεταβλητές γιατί σε περίπτωση που υπάρχει μια get μεταβλητή στο url εμφανίζεται το site χωρίς το βασικό κομμάτι του (αυτό που αντιστοιχεί στο url της βάσης); Να τονίσω πως με ενδιαφέρει να "αγνοώ" τις get μεταβλητές στο url αν αυτές υπάρχουν. *Ενημέρωση Θα μπορούσε να είναι το παρακάτω η λύση; $browser_link = $_SERVER["REQUEST_URI"]; $browser_link = strtok($browser_link, '?'); //δουλεύει με αυτό, αλλά θα ήθελα να μου πείτε τη γνώμη σας. if($browser_link === "/blog"){ $isBlog = true; }else{ $isBlog = false; } if(strpos($browser_link, "blog/article/") !== false){ $isArticle = true; }else{ $isArticle = false; } Επεξ/σία 10 Ιουλίου 2019 από rafinos
leonidas_fs Δημοσ. 12 Ιουλίου 2019 Δημοσ. 12 Ιουλίου 2019 Η strtok() σίγουρα κάνει αυτό που θέλεις, οπότε νομίζω οτι είσαι αρκετά καλυμμένος! 1
k33theod Δημοσ. 13 Ιουλίου 2019 Δημοσ. 13 Ιουλίου 2019 Στο RewriteRule κάνεις ένα κανόνα και πας στο script php και τον σπας χωρίς condition. Και το ερώτημα είναι αφού τον σπας οπωσδήποτε γιατί τον κάνεις εξαρχής; ☹️
montexristos Δημοσ. 13 Ιουλίου 2019 Δημοσ. 13 Ιουλίου 2019 Το L sto [NC,L,QSA] δηλώνει στον apache να σταματησει εκεί το processing, δηλαδή ότι ειναι ο τελευταίος κανόνας αν αλλάξεις τη σειρά σε [NC,QSA,L] θεωρώ θα είσαι οκ
rafinos Δημοσ. 13 Ιουλίου 2019 Μέλος Δημοσ. 13 Ιουλίου 2019 (επεξεργασμένο) 1 ώρα πριν, k33theod είπε Στο RewriteRule κάνεις ένα κανόνα και πας στο script php και τον σπας χωρίς condition. Και το ερώτημα είναι αφού τον σπας οπωσδήποτε γιατί τον κάνεις εξαρχής; ☹️ Μπορείς να μου εξηγήσεις τι εννοείς λίγο καλύτερα; @montexristos με αυτό που είπες δεν ανοίγει καν το site. Νομίζω πως θα κρατήσω την δική μου λύση, αλλά σε ευχαριστώ όπως και να έχει. Επεξ/σία 13 Ιουλίου 2019 από rafinos
k33theod Δημοσ. 13 Ιουλίου 2019 Δημοσ. 13 Ιουλίου 2019 (επεξεργασμένο) Στο .htaccess λες αν δεν είναι file και αν δεν είναι dir δώσε μου ένα url με ερωτηματικό /index.php?path=$1 και πας στο php και λες πάρε αυτό το url και αφέρεσαι το ερωτηματικό και κάτω και δώσε μου το /index.php. Και η ερώτηση είναι γιατί το ζητάς να δημιουργηθεί αφού το αφαιρείς. Δεν ξέρω αν με καταλαβαίνεις Παράδειγμα, εσύ έχεις p.x το host insomnia.gr και δεν έχει directory paok κάνεις ένα κανόνα που λες εάν κάποιος γράψει insomnia.gr/paok θέλω να γίνεται insomnia.gr/index.php?path=/paok. Πας μετά στο php και λες $browser_link = strtok($browser_link, '?'); και η php παίρνει το /index.php?path=/paok (που δημιουργήθηκε από τον κανόνα που εσύ έγραψες) και το κάνει /index.php Επεξ/σία 13 Ιουλίου 2019 από k33theod
rafinos Δημοσ. 13 Ιουλίου 2019 Μέλος Δημοσ. 13 Ιουλίου 2019 Χωρίς το rule δυστυχώς δεν δουλεύουν τα custom urls. Επειδή δεν γνωρίζω ολύ καλά πως δουλεύει όλο αυτό, αν έχεις να προτείνεις κάποιο πιο σωστό rule που να μου δεχεται custom urls οποιασδήποτε μορφής χωρίς περιορισμούς να κανω καμια δοκιμή θα το εκτιμούσα.
k33theod Δημοσ. 13 Ιουλίου 2019 Δημοσ. 13 Ιουλίου 2019 (επεξεργασμένο) Δεν έχω καταλάβει δυστηχώς. Custom url εννοείς το ^(.*)$ ; αφού δεν το χησιμοποιείς. Το πιάνεις με το path αλλά δεν κάνεις κάτι με αυτό. Τέσπα αυτό που προτείνω χωρίς να ξέρω τι ακριβώς κάνεις είναι το rewrite rule RewriteRule ^.*$ /index.php Κανένα flag δεν απαιτείται ούτε οι παρενθέσεις στο regex αφού δεν έχεις backreference στο target. Εδώ άλλωστε καταλήγεις με τον υπάρχοντα κώδικα ή αφήνεις to rule όπως το έχεις και αλλάζεις το index.php if(isset($_GET['path'])) $path = $_GET['path']; και εδώ κάτι πρέπει κάνεις με αυτό το $path Το δεύτερο το θεωρό πιο σωστό Επεξ/σία 13 Ιουλίου 2019 από k33theod
rafinos Δημοσ. 13 Ιουλίου 2019 Μέλος Δημοσ. 13 Ιουλίου 2019 1 ώρα πριν, k33theod είπε Δεν έχω καταλάβει δυστηχώς. Custom url εννοείς το ^(.*)$ ; αφού δεν το χησιμοποιείς. Το πιάνεις με το path αλλά δεν κάνεις κάτι με αυτό. Τέσπα αυτό που προτείνω χωρίς να ξέρω τι ακριβώς κάνεις είναι το rewrite rule RewriteRule ^.*$ /index.php Κανένα flag δεν απαιτείται ούτε οι παρενθέσεις στο regex αφού δεν έχεις backreference στο target. Εδώ άλλωστε καταλήγεις με τον υπάρχοντα κώδικα ή αφήνεις to rule όπως το έχεις και αλλάζεις το index.php if(isset($_GET['path'])) $path = $_GET['path']; και εδώ κάτι πρέπει κάνεις με αυτό το $path Το δεύτερο το θεωρό πιο σωστό Εγώ στον browser θέλω να φαίνονται μόνο urls της μορφής: test.com/page/test, test.com/, test.com/blog/ κτλ. Για να τα χρησιμοποιώ όμως πρέπει να γίνουν κάποιες αλλαγές στον .htaccess αρχείο. Βέβαια δεν σημαίνει απαραίτητα πως όταν εγώ γράψω test.com/page/test τότε στον κώδικά μου θα έχω κάποια $_GET['page'] = test. Ο κώδικας, θα πάρει το url και θα κάνει αυτός τη δουλειά που γνωρίζει. Επίσης, στον κώδικα δεν χρησιμοποιώ $_GET μεταβλητές και άρα όταν το link περιέχει τέτοιες, τότε ο κώδικάς μου δεν καταλάβαινε ότι αυτά τα δεδομένα είναι άχρηστα και έτσι έπρεπε να κάνω αυτό το με το strtok(). Πάντως, αν δεν έχω τα παραπάνω rules και γράψω test.com/page/test μου βγάζει not found κτλ. Επίσης στο url μου δεν θέλω να χρειάζεται να γράφω και το "index.php". Τώρα τα εξήγησα καλύτερα;
kinhthra Δημοσ. 1 Ιανουαρίου 2021 Δημοσ. 1 Ιανουαρίου 2021 μια που υπάρχει ήδη το θέμα έχω ένα πρόβλημα κι εγώ. πώς μπορώ να κάνω redirect από file σε file.html;
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα