.htaccess

Τεχνικές και μόνο Συζητήσεις για WEB hosting servers, Mail servers, DNS servers. Όχι αναζήτηση υπηρεσιών εδώ!

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Serghio
Δημοσιεύσεις: 451
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

.htaccess

Δημοσίευση από Serghio » 15 Ιαν 2014 15:30

Φτιάχνω ενα web app locally κάνοντας χρήση όλων τον σχετικων(Αpache,MySql,php),είμαι στο σημείο που θέλω να αρχίσω να παίζω με το αρχείο .htacces για να πραγματοποιήσω τα διάφορα rewrites(το χρειάζομαι για να στήσω ένα RESTful API).

Η ερώτηση είναι που πρέπει να μπει το .htaccess για να αρχίζω να βλέπω τα rewrites στην πράξη-να κάνω τους πειραματισμούς μου δηλαδή.

Αυτό είναι το path που έχει η εφαρμογή στον δισκο C:\Apache24\htdocs\webapp

και το htaccess βρίσκεται τοποθετημένο εδώ C:\Apache24\htdocs

Μήπως πρέπει να μπει στο folder της εφαρμογής;

Και κάτι ακόμα πως θα καταλάβω οτι το rewrite module είναι εγκατεστημένο στον apache;
Kαι κάτι ακόμα...sorry που τα λέω ένα ένα.

Το htaccess αρχείο έχει κατάληξη txt. Από όσο ξέρω για να λειτουργήσει το συγκεκριμένο αρχείο πρέπει να έχει κατάληξη .htaccess, προσπαθώ να το κάνω αυτό αλλά τα windows δεν μου το επιτρέπουν.

Μου βγάζουν μήνυμα ότι πρέπει να πληκτρολογήσω ένα όνομα αρχείου.

Άβαταρ μέλους
burnmind
Script Master
Δημοσιεύσεις: 954
Εγγραφή: 26 Σεπ 2009 02:14
Τοποθεσία: UK
Επικοινωνία:

.htaccess

Δημοσίευση από burnmind » 15 Ιαν 2014 16:25

Αν τα rewrites γίνονται από το root της εφαρμογής σου, τότε θα το βάλεις εκεί (στο παράδειγμά σου, στον φάκελο webapp).

Για να δεις αν το rewrite module είναι enabled, χωρίς να είμαι 100% σίγουρος, δες αν υπάρχει η παρακάτω γραμμή στο httpd.conf:

Κώδικας: Επιλογή όλων

LoadModule rewrite_module modules/mod_rewrite.so
Εναλλακτικά, κάνε ένα απλό test:

Δημιούργησε ένα test.php, πχ:

Κώδικας: Επιλογή όλων

<?php echo 'test'; ?>
Και στο .htaccess βάλε:

Κώδικας: Επιλογή όλων

RewriteEngine On 

RewriteCond %&#123;REQUEST_FILENAME&#125; !-f 
RewriteCond %&#123;REQUEST_FILENAME&#125; !-d 
RewriteRule .* ./test.php &#91;L&#93;
Αν πας στο http://localhost/webapp/asdasdasd, θα πρέπει να εμφανίζει "test".

edit: Για την ερώτηση για το πώς θα το δημιουργήσεις (μάλλον έκανες edit καθώς έγραφα το post), ψάξε και τίποτα στο google! :P http://stackoverflow.com/questions/5004 ... ple-htacce

Serghio
Δημοσιεύσεις: 451
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

.htaccess

Δημοσίευση από Serghio » 15 Ιαν 2014 18:14

με το rename του αρχείου είμαστε ΟΚ...
Κατα τα άλλα δεν "παίζει"...πάμε πάλι.

Μέσα στο folder του Apache βρήκα ένα αρχείο httpd.conf και ακολούθως αυτήν την γραμμή
LoadModule rewrite_module modules/mod_rewrite.so όπου το έκανα uncomment-υποθέτω ότι με αυτον τον τρόπο ενεργοποιώ το συγκεκριμένο module.

To αρχείο htaccess το έβαλα εδώ C:\Apache24\htdocs\events\Administrator

H εφαρμογή αφορά την αποθήκευση events και το rewriting θέλω να αφορά όταν χρηστης ζητήσει κάποια σελίδα μεσα στο admin της εφαρμογής-βέβαια εμείς(εσύ) για λόγους testing έχει γράψει τον κώδικα ώστε οποιαδήποτε σελίδα ζητήσει ο χρήστης αυτή να παραπέμπει στο test.php.

Δηλαδή...για να γίνω σαφέστερος..ζητάμε να βγαίνει η test.php όταν ο χρήστης πληκτρολγήσει στην address bar
http://localhost/events/Administrator/xxxpage.php

Λογικό δεν είναι είναι να υποθέσω ότι το htaccess πρέπει μπει μέσα στο admin folder;

Δεν δουλεύει όμως.

Άβαταρ μέλους
burnmind
Script Master
Δημοσιεύσεις: 954
Εγγραφή: 26 Σεπ 2009 02:14
Τοποθεσία: UK
Επικοινωνία:

.htaccess

Δημοσίευση από burnmind » 15 Ιαν 2014 20:37

Σχετικά με το γιατί δεν παίζει*, δε γνωρίζω (δεν ασχολούμαι ιδιαίτερα με server configuration). Το μόνο σίγουρο είναι πως μετά από κάθε αλλαγή πρέπει να γίνει restart του apache, οπότε κάνε ένα (αν δεν έκανες ήδη).

*Γράψε αν θες ακριβώς τι έχεις κάνει (που έχεις βάλει το .htaccess και τι περιέχει, ποιο URL καλείς, ποια αρχεία υπάρχουν, κλπ) και τι γίνεται όταν καλείς το URL που θέλεις (βγάζει κάποιο error, ή απλά αγνοεί το rewrite;). Θα βοηθήσει να πάρεις κάποια απάντηση από κάποιον που ξέρει.

Από εκεί και πέρα, θεωρητικά μπορείς να βάλεις το .htaccess σε οποιοδήποτε folder θέλεις, όπως και να έχεις διαφορετικά αρχεία σε κάθε folder (αν και λογικά πρέπει να προσέχεις να μην υπάρχουν conflicts).

Προσωπικά πάντως, όταν δε δουλεύω με κάποιο framework που έχει δικό του σύστημα για τα rewrites, βρίσκω πιο βολικό να έχω ένα κεντρικό .htaccess που ρυθμίζει τα πάντα και βρίσκεται στο root, καθώς συνήθως χρειάζονται rewrite τα περισσότερα URLs του project οπότε βολεύει να τα έχω όλα συγκεντρωμένα.

Ενημερωτικά, στο παράδειγμα που έδωσα, οι 2 RewriteCond γραμμές κάνουν τον apache να αγνοεί το rewrite αν το αρχείο (ή το directory) που καλείται υπάρχει. Αν δηλαδή καλέσεις το http://localhost/events/Administrator/xxxpage.php και υπάρχει όντως το xxxpage.php στον συγκεκριμένο φάκελο, τότε θα το εκτελέσει κανονικά και θα αγνοήσει το rewrite.

Αφότου καταφέρεις να το κάνεις να λειτουργήσει, διάβασε κανένα καλό htaccess tutorial (καθώς και κάποιο για regular experssions), γιατί είναι πολύ πιθανό να συναντήσεις αρκετά περίεργα πράγματα. :)

Serghio
Δημοσιεύσεις: 451
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

.htaccess

Δημοσίευση από Serghio » 16 Ιαν 2014 21:51

τελικά έκανα το htaccess να δουλέψει, η "πλάκα" είναι όμως ισως δεν χρειάζεται καν να το χρησιμοποιήσω αφού μπορεί να στηθεί REST interface χωρίς να είναι ανάγκη να γίνεται URL rewriting

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

.htaccess

Δημοσίευση από korgr » 17 Ιαν 2014 09:38

To URL rewriting είναι σε κάθε περίπτωση, λειτουργικά προαιρετικό!
Φυσικά σε ένα web service είναι αρκετά σημαντικό να δίνεις ένα friendly url :)

Serghio
Δημοσιεύσεις: 451
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

.htaccess

Δημοσίευση από Serghio » 17 Ιαν 2014 14:57

korgr έγραψε:To URL rewriting είναι σε κάθε περίπτωση, λειτουργικά προαιρετικό!
Φυσικά σε ένα web service είναι αρκετά σημαντικό να δίνεις ένα friendly url :)
Ωραία,θα γίνω πιο συγκεκριμένος...για να αποσαφηνιστεί κιόλας αν όντως χρειάζεται URL rewriting στην περίπτωση μου.Διαβάω 2 tutorials, το ένα είναι για την δημιουργία events calendar κάνοντας χρήση του fullcalendar jquery plugin και του backbone.js-blog.shinetech.com/2011/08/05/building-a-shared-calendar-with-backbone-js-and-fullcalendar-a-step-by-step-tutorial/

To άλλο tutorial απλώς εξηγεί πως να στηθεί ένα RESTful API με PHP-επιδεικνύοντας όλο τον σχετικό κώδικα(abstract class API)-coreymaynard.com/blog/creating-a-restful-api-with-php/

Aυτό που προσπαθώ να κάνω είναι απλώς να "παντρέψω" τρόπον τινα τα 2.
Κάνοντας χρήση του backbone π.χ η αποθήκευση ενός event γινεται με POST σε μια σελίδα ονόματι events...κάτι που φαίνεται στο σχετικό url property του backbone κώδικα.

Πως θα περάσει όμως αυτό στο URL και από εκεί στο κατάλληλο script-δεν περιμένω να μου τα πείτε όλα αλλά ένα tip να ξεκολλήσω λίγο.

alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

.htaccess

Δημοσίευση από alou » 17 Ιαν 2014 17:00

Όπως σου είπε και ο Kor, δεν είναι απαραίτητο λειτουργικά όμως σε ένα api συνηθίζεται (και βέβαια είναι πρακτικό) να δώσεις οδηγίες για να δει κάτι κάποιος το

api/events/eventslug
ή το api/events/2013/jan

παρά το api.php?show=events&view=list&year=2013&month=jan ας πούμε.
Πόσο μάλλον χτίζοντας 2 εφαρμογές που θα επικοινωνούν, με δικά τους models.

Το rewrite, ουσιαστικά, παίρνει το url μετά το api/ και το περνάει σαν παράμετρο στο script σου, εσύ ούτως ή άλλως θα πάρεις τις παραμέτρους και ανάλογα τι είναι, θα πράξεις.

Επομένως, αν λειτουργεί το htaccess, το url
somesite.gr/api/events/october
θα καταλήξει να στείλει στο myapi.php ένα get με παράμετρο το request=events/october (σαν να ήταν το url myapi.php?request=events/october) ας πούμε.

Η λειτουργία του rewrite, για αυτό το rewrite συγκεκριμένα:
RewriteRule api/v1/(.*)$ api/v1/MyAPI.php?request=$1 [QSA,NC,L]
είναι ότι υπάρχει στο url μετά το api/v1/ να περάσει σαν παράμετρος και να εκτελεστεί το url api/v1/MyAPI.php?request=παράμετρος

Μαζί με όλα τα υπόλοιπα, θα πάρεις και αυτό και ...

Serghio
Δημοσιεύσεις: 451
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

.htaccess

Δημοσίευση από Serghio » 17 Ιαν 2014 19:08

alou έγραψε: παρά το api.php?show=events&view=list&year=2013&month=jan ας πούμε.

...
Ωραία ας πουμε οτι δεν προχωράω σε rewrites και τα URL's έχουν την παραπάνω μορφή-θα εξακολουθεί να είναι RESTful το interface;

Στο παραπάνω μπερδεύομαι...υπάρχει κάποια διαφορά στο user experience.
Σε γενικές γραμμές έχω καταλάβει, και πείτε μου αν είμαι λάθος oτι REST σημαίνει o browser δεν ξαναφορτώνει σε κάθε request συν βέβαια ότι έχουμε να κάνουμε και με κάποιου είδους άλλα requests πέρα από τα κλασικά(PUT etc), και τέλος δεν υπάρχουν sessions.
Αυτα δηλαδή ορίζουν τι είναι rest-βέβαια δεν έχω καταλάβει ακόμη ποιά είναι τα οφέλη από αυτό.

alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

.htaccess

Δημοσίευση από alou » 17 Ιαν 2014 21:19


Απάντηση

Επιστροφή στο “Apache, IIS, DNS Servers”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης