Προς το περιεχόμενο

.htaccess ερώτηση (ή και όχι)


rafinos

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Γεια σας παιδιά!

Έχω κάνει κάποιες ρυθμίσεις μέσω  .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;
}

 

Επεξ/σία από rafinos
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Στο RewriteRule κάνεις ένα κανόνα και πας στο script php και τον σπας χωρίς condition. Και το ερώτημα είναι αφού τον σπας οπωσδήποτε γιατί τον κάνεις εξαρχής; ☹️

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Το L sto 

[NC,L,QSA]

δηλώνει στον apache να σταματησει εκεί το processing, δηλαδή ότι ειναι ο τελευταίος κανόνας

αν αλλάξεις τη σειρά σε 

[NC,QSA,L]

θεωρώ θα είσαι οκ

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)
1 ώρα πριν, k33theod είπε

Στο RewriteRule κάνεις ένα κανόνα και πας στο script php και τον σπας χωρίς condition. Και το ερώτημα είναι αφού τον σπας οπωσδήποτε γιατί τον κάνεις εξαρχής; ☹️

Μπορείς να μου εξηγήσεις τι εννοείς λίγο καλύτερα;

@montexristos με αυτό που είπες δεν ανοίγει καν το site. Νομίζω πως θα κρατήσω την δική μου λύση, αλλά σε ευχαριστώ όπως και να έχει. :)

Επεξ/σία από rafinos
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Στο .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

Επεξ/σία από k33theod
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Χωρίς το rule δυστυχώς δεν δουλεύουν τα custom urls. Επειδή δεν γνωρίζω ολύ καλά πως δουλεύει όλο αυτό, αν έχεις να προτείνεις κάποιο πιο σωστό rule που να μου δεχεται custom urls οποιασδήποτε μορφής χωρίς περιορισμούς να κανω καμια δοκιμή θα το εκτιμούσα. 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Δεν έχω καταλάβει δυστηχώς.

Custom url εννοείς το  ^(.*)$ ;  αφού δεν το χησιμοποιείς. Το πιάνεις με το path αλλά δεν κάνεις κάτι με αυτό.

Τέσπα αυτό που προτείνω χωρίς να ξέρω τι ακριβώς κάνεις είναι το rewrite rule

RewriteRule ^.*$ /index.php 
Κανένα flag δεν απαιτείται ούτε οι παρενθέσεις στο regex αφού δεν έχεις backreference στο target.

 Εδώ άλλωστε καταλήγεις με τον υπάρχοντα κώδικα

ή  αφήνεις to rule όπως το έχεις και αλλάζεις το index.php

if(isset($_GET['path']))
	$path = $_GET['path'];

και εδώ κάτι πρέπει κάνεις με αυτό το $path

Το δεύτερο το θεωρό πιο σωστό

 

Επεξ/σία από k33theod
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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".

Τώρα τα εξήγησα καλύτερα;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • 1 χρόνο αργότερα...

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...