Suora webinaari tutkimusartikkeleiden kirjoittamisesta ja julkaisemisesta Good Impact Journal -lehdessä IFERP

HUOMAUTUS: Termini ei ehkä ole täysin oikea. Uskon, että StackExchange tekee jotain, mitä kysyn, jos se voi tehdä asioista selkeämpiä.

Käyttämällä PHP Apachessa, Haluaisin käsitellä seuraavia URL-osoitteita:

http://www.site.com/info/// 

Esimerkiksi = toyota, = camry, = 'safety'

Ja pitääkö kaikki URL-osoitteet, jotka alkavat 'info' (sanotaan), käsittelemän yksi PHP-tiedosto, kuten 'info.php', ilman että URL-osoite sijaintipalkissa muuttuu.

Toisin sanoen joku navigoi:

http://www.site.com/info/toyota/camry/safety 

Mutta koodi tämän käsittelemiseksi on info.php mutta selaimen URL-osoite pysyy sellaisenaan.En halua luoda kaikkia / toyota / camera / safety-hakemistorakenteita (niitä olisi 1000).

Oletan, että info.php saisi polkukomponentit parametreina tietääkseen mitä sisältöä näytetään. Joten käyttäjän näkymätön sisäinen kutsu olisi:

info.php?brand=toyota&model=camera&page=safety 

Näyttää siltä, ​​että kysymys tekee jotain vastaavaa, koska he saavat URL-osoitteita, kuten:

http://webmasters.stackexchange.com/questions/13978/how-to-implement-user-friendly-paths-in-php-without-creating-a-file-or-directory 

ja oletan, että polkua ei ole luotu palvelimelle.

Koska käytät Apachea, haluat mod_rewrite-tiedoston, joka on yleensä käytettävissä oletuksena. mod_rewrite antaa sinun kirjoita uudelleen Se voi tehdä alipyyntöjä, muuttaa nykyistä pyyntöä tai jopa ohjata käyttäjää muualle. Se on poikkeuksellisen tehokas työkalu, jonka syntaksi voi olla toisinaan tylsä.

Haluat määrittää RewriteRules. RewriteRules käyttävät säännöllisen lausekkeen PCRE-kirjastoa, joten jos olet käyttänyt regeksejä Perlissä tai preg PHP: n toimintoperheen, sinun pitäisi olla melko perehtynyt syntaksiin.

On olemassa kaksi yleistä mallia, kun tehdään kauniita URL-osoitteita mod_rewrite ja PHP. Ensimmäisessä valitset "kiinnityskohdan", jonka alla kaikki kauniit URL-osoitteet elävät, ja vedot sen sijaan PHP-komentosarjan, jolle annetaan loppu polku liitospisteen jälkeen. Esimerkiksi kutsu /info/toyota/camry/saftey voidaan kirjoittaa uudestaan /info.php/toyota/camry/saftey.

Sitten PHP-komentosarja pääsee käsiksi $_SERVER['PATH_INFO'], joka sisältäisi /toyota/camry/safteyja käsittele kyseinen arvo tarpeen mukaan. Kyllä, tämä toimii täysin. Kokeile itse phpinfo-komentosarjalla. Löydät bitit tiedostopäätteen jälkeen PATH_INFO.

Tässä on testaamaton, mutta todennäköisesti toimiva esimerkki:

# ask mod_rewrite to turn itself on RewriteEngine On # If the request is not for an actual file, then... RewriteCond %{REQUEST_FILENAME} !-f # ... capture the part of the path after /info/ and replace it # with a call to the PHP script. In the regex, .+ means 'Any # character, one or more times' RewriteRule ^/info/(.+)$ /info.php/$1 

Toinen malli on luoda uudelleenkirjoitussääntö, jolla puretaan polun osat ja muutetaan siitä tavallinen vanha säännöllinen kyselymerkkijono. Tämä olisi parasta, jos sinulla on olemassa komentosarja etkä halua tehdä siihen muutoksia. Se voi myös olla monimutkaisempi, koska sinun on kirjoitettava yksi sääntö kutakin ehdokas-URL-osoitetta kohti.

Tässä on toinen testaamaton, mutta todennäköisesti toimiva esimerkki.

# /info/foo => info.php?brand=foo # [^/]+ means 'Any character that is not a /, one or more times RewriteRule ^/info/([^/]+)$ /info.php?brand=$1 # /info/foo/bar => info.php?brand=foo&model=bar RewriteRule ^/info/([^/]+)/([^/]+)$ /info.php?brand=$1&model=$2 # /info/foo/bar/baz => info.php?brand=foo&model=bar&page=baz RewriteRule ^/info/([^/]+)/([^/]+)/([^/]+)$ /info.php?brand=$1&model=$2&page=$3 

Tämä on vain vihje mod_rewrite iceburgista. Siellä on paljon, paljon ja paljon opetusohjelmia ja oppaita, jotka voivat auttaa sinua pitkin.

  • No, olen käyttänyt mod_rewrite -ohjelmaa aiemmin, mutta se muuttaa aina käyttäjän näkyvän URL-osoitteen (kuten uudelleenohjaus). Onko se määritysvaihtoehto, jotta käyttäjän antama URL pysyy kiinteänä?
  • 1 Ensimmäinen esimerkki näyttää saavan myös virheellisiä URL-osoitteita. Onko se totta? Eikö tämä aiheuttaisi hämmentäviä 404-levyjä? Yritän toista pian. Kiitos avusta!
  • 1 mod_rewrite lähettää uudelleenohjauksen (mikä saa käyttäjän tekemään uuden pyynnön, muuttamaan URL-osoitetta), jos pyydät sitä, käyttämällä R-lippua. Jos jätät lipun pois, se ei heitä uudelleenohjausta. Molemmat esimerkit voivat hyväksyä syötteen, joka olisi virheellinen, kun se käsitellään PHP: ssä. Voit yksinkertaisesti pyytää komentosarjosi lähettämään 404 sivun takaisin, jos pyyntö vaatii vastausta.
  • Toinen esimerkki on polkujen ja resurssien kallistaminen enää. Näyttää siltä, ​​että polku sisältää väärät tasot eikä info.php-polkua (joka on juuressa). Kuinka voin välttää tämän?
  • Kuten totesin, en todellakaan testannut mitään näistä uudelleenkirjoituksista. Käytän itse asiassa vain ensimmäistä lomaketta tuotannossa ja annan PHP-koodini selvittää loput. Minä ajatella että L-lipun lisääminen kullekin näistä RewriteRules pitäisi tehdä temppu.

työskennellyt sinulle: Charles Robertson | Haluatko yhteyttä?