✔ KĀ NOŅEMT VILKU SLITHER.IO ((labākais skaidrojums))

Ņemot vērā (nedaudz teorētisku) fiziskā diska izkārtojumu:

 \ produkti \ fotokameras \ 50d.jpg \ produkti \ kameras \ 20d.jpg \ izstrādājumi \ objektīvi \ 18-55.jpg \ izstrādājumi \ objektīvi \ 28-135.jpg \ products.php 

Pašlaik man ir veidlapas URL:

 /products.php/ /products.php/cameras/ /products.php/cameras/50d 

Izmantojot produktus.php, izmantojot PATH_INFO, lai pieņemtu lēmumu par to, ko parādīt.

Es cenšos pārrakstīt URL, lai noņemtu .php, bet tomēr ļauju statiskos resursus izgūt?

Pirmkārt, visām šīm slīpsvītrām jābūt slīpsvītrām uz priekšu. The \ tiek izmantots, lai "aizbēgtu" no īpašajām rakstzīmēm, nevis mapju atdalīšanai.

Pārrakstīšana products.php uz products nedarbosies, ja jums jau ir produktu mape. Es iesaku visus attēlus pārvietot uz citu direktoriju, piemēram, /images/cameras/50d.jpg. Tad jūs varat to izdarīt:

RewriteRule ^products products.php 

Ar to jums vajadzēs parsēt pieprasīto URL PHP, lai atrastu mainīgos. Jūs to varētu izmantot arī:

RewriteRule ^products/([^/]+) products.php?cat=$1 RewriteRule ^products/([^/]+)/([^/]+) products.php?cat=$1&prod=$2 

Tagad jūsu PHP skriptā jums automātiski ir nepieciešamie mainīgie, izmantojot $_GET['cat'] un $_GET['prod'].

REDIĢĒT: patiesībā jums ir taisnība, tā ir ir iespējami abi, ja vien visi attēli ir ierobežoti ar konkrētiem paplašinājumiem. Es domāju, ka tas darbosies:

RewriteRule ^products/(.+).jpg products/$1.jpg [L] RewriteRule ^products/([^/]+) products.php?cat=$1 RewriteRule ^products/([^/]+)/([^/]+) products.php?cat=$1&prod=$2 
  • Vai nebūtu iespējams izveidot noteikumu, kas statiskos resursus turētu tur, kur tie atrodas? (patiesībā tas aizstāj dažu nabadzīgu cilvēku pieeju, kur kādam produktam / kategorijai agrāk bija lappuse, kas visi tika pieprasīta koplietojamai bibliotēkai).
  • @Rowland Shaw: Jūs varat saglabāt /products direktoriju, bet tas nozīmē, ka jūs nevarēsiet to izmantot /products lai parādītu lapu. Vietrādī URL vienmēr būs jābūt kategorijai un produkta parametram, piem. /products/lenses/18-55, pretējā gadījumā Apache pēc noklusējuma apkalpos mapi, nevis skriptu.
  • @Rowland: pievienoja iespējamo risinājumu

Izrādās, ka tas darbojas un joprojām ļauj iekšējiem resursiem darboties.

RewriteRule ^products([^\.]+)$ products.php$1 

strādāja par jums: Charles Robertson | Vēlies ar mums sazināties?

noderīga informācija