Excel VBA - kā lokalizēt mapes rekursīvi un kā failu failus

Mēģinu noņemt apakšmapes no savas vietnes URL.

Zemāk ir manu mapju struktūra. Es neesmu pārliecināts, kur novietot savu .htaccess fails un kas tajā ir rakstāms:

  • mysiteroot
    • apakšdirektors1
    • apakšdirektors2
      • index.php
      • page1.php
      • page2.php
      • page3.php

Esmu uzrakstījis sekojošo:

RewriteEngine On RewriteRule ^$ subdir1/subdir2/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ subdir1/$1 

Šķiet, ka tas darbojas tikai indeksā ar mani .htaccess fails ievietots mysiteroot mapē.

Kā es varu pieprasīt page1.php parādīt www.mysiteroot.com/page1 tā vietā www.mysiteroot.com/subdir1/subdir2/page1.php?

Es jau biju uzrakstījis lielāko daļu no tā, pirms jūs ievietojāt savu risinājumu. Izlikšana vienalga kā vispārīgāks risinājums, kas lasītājiem var šķist noderīgs.


Kā es varu pieprasīt page1.php parādīt www.example.com/page1 tā vietā www.example.com/subdir1/subdir2/page1.php?

Jūs to darāt, fiziski mainot vietrāžus URL savā lietojumprogrammā, nevis vietnē .htaccess. Kad jūsu lietojumprogrammā ir mainīti vietrāži URL, pieprasījums ir www.example.com/page1, redzamais URL, kas tiek parādīts lietotājiem (nevis page.php). Pēc tam jūs izmantojat mod_rewrite .htaccess uz iekšēji pārrakstīt redzamo URL atpakaļ uz reālo / slēpto failu sistēmas ceļu: /subdir1/subdir2/page1.php. (Bet man ir aizdomas, ka jūs to jau zināt, jo jūsu kods rīkojas pareizi.)

Failu hierarhijas diagrammā jūs, šķiet, parādāt subdir2 tādā pašā līmenī kā subdir1? Tomēr jūsu kods un URL struktūra liecina subdir2 ir uzņēmuma apakšdirektorijs subdir1. Es pieņemu, ka vēlāk.

Būtībā jums jādara divas lietas:

  1. Pārrakstiet visus pieprasījumus uz /subdir1/subdir2/ (izņemot pieprasījumus, kas tieši saistīti ar failiem vai direktorijiem).

  2. Pievienojiet .php faila paplašinājums pieprasījumiem, kuriem vēl nav faila paplašinājuma.

Izmēģiniet kaut ko līdzīgu šim .htaccess fails dokumenta saknē, ti. mysiteroot/.htaccess.

RewriteEngine On # If the request has already been rewritten # Or maps to an existing file then stop here. # (Can't test for dir here since would not rewrite the doc root) RewriteCond %{ENV:REDIRECT_STATUS} . [OR] RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^ - [L] # No file extension on request then append .php and rewrite to subdir RewriteCond %{REQUEST_URI} /(.+) RewriteRule !\.[a-z0-4]{2,4}$ /subdir1/subdir2/%1.php [NC,L] # All remaining requests simply get rewritten to the subdir RewriteRule (.*) /subdir1/subdir2/$1 [L] 

Jebkurš pieprasījums pēc /path/to/file (kas tieši nepiesaista failu) iegūst iekšēji pārrakstīts uz /subdir1/subdir2/path/to/file.php.

Pirmais RewriteCond direktīva nodrošina, ka mēs nepārrakstām pieprasījumus, kas jau ir pārrakstīti apakšdirektorijā, tādējādi novēršot cilmes pārrakstīšanu.

Es atradu risinājumu, kas atbilst tam, ko es gribēju darīt. Cilvēki tiešsaistē sniedz ģenerējošu atbildi, taču jautājums ir tāds, ka es nedomāju izmantot tos pašus lapu nosaukumus bez paplašinājumiem, lai atsauktos uz manām lapām. Tas nozīmē, ka es glabāju failu ar galveno lapu sarakstu.

Tālāk ir sniegta informācija par manu risinājumu: - ievietojiet failu htaccess manā saknes mapē - skatiet apakšdirektoriju lapas, izmantojot absolūtu atsauci

htaccess faila saturs:

RewriteEngine On Options -Indexes #prevents access to folders RewriteRule ^page1?$ ./subdir2/page1.php RewriteRule ^page2?$ ./subdir2/page2.php 

Tādējādi visas htaccess lapas darbosies tā, it kā tās būtu saknes direktorijā. Tātad, ja vēlaties izsaukt lapu, kas nav galvenā lapa un atrodas apakšmapē, atsaucieties uz to tajā laikā, pārejot no saknes mapes

Brīžiem vislabāk darbojas vienkārši risinājumi

  • Paldies par atsauksmēm. Jūsu risinājums patiešām ir vienkāršāks, nekā norāda jūsu jautājums! Tomēr jūsu ievietotajās direktīvās ir dažas lietas, kuras "jāpārbauda". Jūs, iespējams, vēlaties noņemt ? iekš RewriteRule modelis (i) , piem. ^page1?$. Šis ir regex, tāpēc ? padara iepriekšējo rakstzīmi neobligātu. Šis modelis atbilstu "page1" un "page". Jums vajadzētu arī noņemt . (dot) prefikss uz RewriteRule aizstāšana (labākajā gadījumā tas ir pilnīgi lieks). Jums jāiekļauj L karogu uz jūsu direktīvām. Un Apache neatbalsta rindas beigu komentārus.

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