Puncte:2

a folosit două puncte pentru url htaccess http://localhost/1:1

drapel cn

Am o problemă cu două puncte folosite în url

aceasta este adresa mea URL

http://localhost/1:1

acesta este accesul meu

RewriteEngine Pornit
RewriteRule ^/(.*):(.*) index.php/$1:$2

această eroare arată Interzis Nu aveți permisiunea de a accesa /1:1 pe acest server.

# Gazde virtuale
#
<VirtualHost *:80>
  ServerName gazdă locală
  ServerAlias ​​localhost
  DocumentRoot „${INSTALL_DIR}/www”
  <Directorul „${INSTALL_DIR}/www/”>
    Opțiuni +Indexuri +Include +FollowSymLinks +MultiViews
        AllowOverride all
        Comanda Permite, Refuza
        Permite de la toți
  </Director>
</VirtualHost>
Michael Hampton avatar
drapel cz
Verificați jurnalul de erori Apache.
Puncte:1
drapel kz

Sunt câteva probleme aici...

  1. Într-un per-director .htaccess context, calea URL potrivită de RewriteRule model nu începe niciodată cu o bară oblică, deci regex ^/(.*):(.*) nu se va potrivi niciodată și directiva nu face nimic. Asa ca RewriteRule model ar trebui să fie ^(.*):(.*) - fără prefix bară oblică.

    • Cu toate acestea, această regex este foarte general și cel mai probabil se potrivește prea mult. Dacă vă așteptați la o solicitare a formularului /1:1, adică. /<număr>:<număr> apoi utilizați un regex mai specific, de ex. ^\d+:\d+$
  2. Deoarece primiți un 403 Forbidden (spre deosebire de un 404 Not Found), presupun că vă aflați pe un server Windows. „Problema” aici este aceea : (punctele) nu sunt caractere valide în numele fișierelor Windows. Aceasta este o problemă cu .htaccess deoarece cererea este mapată la sistemul de fișiere înainte .htaccess (și mod_rewrite) este procesat - moment în care 403 este declanșat. În schimb, ar trebui să rescrieți cererea în configurația serverului principal (sau containerul VirtualHost) - ceea ce apare inainte de cererea este mapată la sistemul de fișiere.

Deci, ceea ce încercați să faceți... rescrieți cererea care conține două puncte, folosind .htaccess pe un server Windows nu este posibil. Puteți face acest lucru pe Linux (care permite două puncte în numele fișierelor) SAU în configurația serverului principal (Server sau virtualhost context) pe Windows, dar nu în .htaccess.

Când utilizați mod_rewrite într-un Server (sau virtualhost) context (spre deosebire de .htaccess) tu do nevoie de prefixul slash (pe ambele model și substituţie siruri de caractere). De exemplu:

# Într-un context „server” (sau „gazdă virtuală”),
# nu „.htaccess” (sau secțiunea „<Directory>” din configurația serverului)

RewriteEngine Pornit

# Rescrie intern „/1:1” în calea-info pe „index.php”
RewriteRule ^/\d+:\d+$ /index.php$0 [L]

The $0 backreference conține întreaga cale URL care este capturată de RewriteRule model. Aceasta include prefixul slash (atunci când este utilizat într-un Server context), motiv pentru care delimitatorul slash este omis în substituţie şir.


ACTUALIZAȚI:

Am făcut modificările, vă rog să vă uitați din nou la întrebarea mea și să vedeți, am introdus-o corect

<VirtualHost *:80>
  ServerName localhost
  ServerAlias localhost
  DocumentRoot "${INSTALL_DIR}/www"
  <Directory "${INSTALL_DIR}/www/">
    Options +Indexes +Includes +FollowSymLinks +MultiViews
        AllowOverride all
        Order Allow,Deny
        Allow from all
  </Directory>
</VirtualHost>

Se pare că nu ai făcut nicio modificare; cel putin nu in sectiunea potrivita? După cum sa menționat mai sus, aceste directive trebuie adăugate direct la <VirtualHost> container (pe care l-ați postat). Ele nu pot fi adăugate la .htaccess fișier pe un sistem de operare Windows - pur și simplu nu vor face nimic și veți primi răspunsul 403 Forbidden așa cum este menționat.

Cele de mai sus ar trebui scrise astfel:

<VirtualHost *:80>
  ServerName localhost
  ServerAlias localhost
  DocumentRoot "${INSTALL_DIR}/www"

  # Enable the rewrite engine in a virtualhost context
  RewriteEngine On

  # Internally rewrite "/1:1" to path-info on "index.php"
  RewriteRule ^/\d+:\d+$ /index.php$0 [L]

  <Directory "${INSTALL_DIR}/www/">
    Options -Indexes -Includes +FollowSymLinks -MultiViews
    AllowOverride all
    Require all granted
  </Directory>
</VirtualHost>

Va trebui să reporniți Apache pentru ca aceste modificări să aibă efect. (Spre deosebire de .htaccess fișiere care sunt interpretate în timpul execuției.)

Totuși, în ce alte directive aveți .htaccess și cum sunt direcționate celelalte adrese URL ale dvs.? Ați postat următoarea directivă în comentarii:

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

Aceasta direcționează adresa URL destul de diferit față de ceea ce solicitați în întrebarea dvs. În întrebarea dvs., transmiteți calea URL ca informații suplimentare despre cale index.php. Cu toate acestea, în această directivă treceți adresa URL ca parte a șirului de interogare? Cum se leagă acestea? De ce sunt diferite? În mod evident, trebuie să transmiteți adresa URL în modul în care se așteaptă „aplicația MVC”.

amir shariflou avatar
drapel cn
Vă mulțumesc foarte mult că ați postat și comentat acest ghid pentru mine, dar nici această soluție nu a funcționat. Da, vreau ca această instrucțiune să fie folosită în Vamp Server.Pe o gazdă virtuală Linux, dacă este posibil, o voi încerca o dată. Încerca
amir shariflou avatar
drapel cn
Sau mai degrabă, ce instrucțiuni pot obține de la două puncte din parametri? ai o solutie? aceasta este eroarea mea (Server Apache/2.4.37 (Win64) PHP/7.0.33 la portul localhost 80)
drapel kz
Soluția (soluția) pe care am postat-o ​​mai sus ar trebui să funcționeze așa cum este scris. Am testat acest lucru pe un server Apache/Windows folosind un `` în configurația serverului și funcționează conform intenției... pentru a trece calea URL (`/1:1`) ca PATH_INFO scriptului `/index.php` (care pare să fie ceea ce încercați faceți în întrebarea dvs.). (Acesta nu este singurul mod de a transmite calea URL. Puteți să o transmiteți ca șir de interogare sau să nu transmiteți nimic și să examinați `REQUEST_URI` în schimb - dar acest lucru depinde de ceea ce se așteaptă scriptul dumneavoastră.)
drapel kz
@amirshariflou Unde mai exact folosești aceste directive? Vă rugăm să adăugați directivele relevante pentru server la întrebarea dvs. Ai repornit Apache după ce ai schimbat configurația serverului? "ce instrucțiuni pot obține de la două puncte din parametri?" - Îmi pare rău, nu sunt sigur ce vrei să spui cu asta? Mai primești un 403 Forbidden? Cum se așteaptă scriptul tău (`index.php`) să citească calea URL? „aceasta este eroarea mea” - nu văd o eroare?
drapel kz
@amirshariflou Mi-am actualizat răspunsul pentru a elimina o bară oblică suplimentară/inutilă din șirul _substitution_. Deși aceasta este într-adevăr doar o „îngrijire”, de fapt nu are nicio diferență dacă „funcționează” sau nu.
amir shariflou avatar
drapel cn
Vă mulțumesc foarte mult pentru timpul acordat, dar problema mea nu a fost rezolvată. Vă rog să scrieți codul exact pentru a afla ce este. Am încercat în multe moduri, dar nu a funcționat, dar transferul capcanei către gazda Linux rulează acolo fără a fi nevoie de cod. Nu știu de ce deranjează în wampserver - chiar am decis să folosesc alt xampp. Dar știu că trebuie corectat cu un cod în fișierul htaccess
amir shariflou avatar
drapel cn
Vedeți această adresă, vreau să fac exact asta - http://www.recitequran.com/1:1
drapel kz
@amirshariflou „Vă rugăm să scrieți codul exact pentru mine” - codul din răspunsul meu _este_ codul exact. Cu toate acestea, trebuie să îl plasați în locul corect în configurația serverului (nu `.htaccess`) și să reporniți serverul. Aceasta depinde de modul în care v-ați configurat serverul. Vă rugăm să adăugați secțiunile relevante din configurația serverului dvs. la întrebarea dvs., cu aceste directive în vigoare - apoi pot să mă uit și să verific. „Nu știu de ce deranjează în wampserver” - așa cum se spune în răspunsul meu, aceasta este o limitare a sistemului de operare Windows, nu Apache.
drapel kz
@amirshariflou "Știu că trebuie corectat cu un cod în fișierul htaccess" - Nu. După cum am spus în răspunsul meu, nu puteți folosi `.htaccess` pentru aceasta (pe Windows). Trebuie să plasați aceste directive în configurația serverului principal (sau `` container).
drapel kz
@amirshariflou Ce alte directive mai ai în fișierul tău `.htaccess`? Cum sunt direcționate alte adrese URL?
amir shariflou avatar
drapel cn
Rutarea mea se datorează faptului că lucrez cu mvc php și lucrez conform standardului, dar aici ideea este ce ar trebui să se întâmple în fișierul htaccess că atunci când introduceți adresa, serverul wamp nu face o eroare și returnează valorile 1 : 1 ca parametru Încercați o dată pe sistemul dvs., este foarte important să o facă
amir shariflou avatar
drapel cn
Eroare Interzis Nu aveți permisiunea de a accesa /1:1 pe acest server. Apache/2.4.37 (Win64) PHP/7.0.33 Server la localhost Port 80
amir shariflou avatar
drapel cn
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
drapel kz
Aveți acces la configurația serverului Apache? `` container care _definește_ site-ul dvs.? Vă rugăm să vă editați întrebarea pentru a include aceste informații. „serverul wamp **nu** face o eroare” / „Eroare interzisă Nu aveți permisiunea de a accesa”?! Pe ce server primești răspunsul „Interzis”?
amir shariflou avatar
drapel cn
Am făcut modificările, vă rog să vă uitați din nou la întrebarea mea și să vedeți, am introdus-o corect
drapel kz
@amirshariflou Mi-am actualizat răspunsul. Cu toate acestea, trebuie să vedem și conținutul fișierului dvs. `.htaccess`, deoarece acesta ar putea fi conflictual și poate cauza probleme suplimentare.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.