Puncte:1

Cum să utilizați Mod Rewrite pentru a accesa fișierele foldere care nu sunt documente rădăcină?

drapel tr

Am următoarea structură pentru codurile site-ului meu la /var/www/html

-- fișiere
---- test.txt

-- aplicație
---- SomePhpCodes.php
---- SomePhpCodes.php

-- public
---- index.php
---- .htaccess

Rădăcina documentului este setată să fie „/var/www/html/public”, dar vreau și să am fișiere accesibile prin calea „http://mywebsite/files/test.txt”.

Cred că acest lucru trebuie să fie posibil folosind mod_rewrite în .htaccess dosar înăuntru public dar mă chinui să o fac.

Am încercat să adaug o regulă la valoarea implicită .htaccess care este oferit de cadrul Laravel. Curentul .htaccess arata asa:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # The following rule is added by me
    RewriteRule files/(.*\.txt) /var/www/html/files/$1 [L]

    # Send Requests To Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

Rezultatul curent este Internal Server Error când încercați să accesați „http://mywebsite/files/test.txt”. Am senzația că s-ar putea să fi ratat unele setări pentru a face public folderul „fișiere”, dar nu am idee cum să fac acest lucru.

Sunt blocat si daca ma poate ajuta cineva o sa apreciez.

Puncte:2
drapel jp

Puteți crea un link simbolic

ln -s /var/www/html/files /var/www/html/public/files

Vei avea nevoie Opțiuni +FollowSymLinks pentru ca asta să funcționeze. Vă rugăm să rețineți că această opțiune adaugă un risc de securitate, deoarece permite accesarea fișierelor în afara DocumentRoot.

Alternativ, puteți adăuga Alias ​​/fișiere /var/www/html/fișiere pentru dumneavoastră VirtualHost configurație pentru acest site. Este o opțiune mai sigură, dar cu care nu o poți face .htaccess.

Puncte:1
drapel kz

Pe lângă răspunsul lui @AlexD...

cred că acest lucru trebuie să fie posibil folosind mod_rewrite în .htaccess fişier

Acest lucru este posibil folosind mod_rewrite, dar nu în .htaccess. Ar trebui să faceți acest lucru direct în configurația serverului principal (sau containerul VirtualHost).

Într-o director (sau .htaccess) context la care sunteți restricționat să rescrieți numai la o cale URL. Cu toate acestea, într-o Server (sau virtualhost) context pe care îl puteți rescrie într-o cale URL sau o cale absolută a sistemului de fișiere.

Cu toate acestea, aceasta nu este cauza dvs Internal Server Error...

RewriteRule files/(.*\.txt) /var/www/html/files/$1 [L]

Cel mai probabil, acest lucru are ca rezultat o buclă de rescriere (deci răspunsul 500 de eroare internă a serverului) deoarece RewriteRule model se potrivește și cu substituţie șir (o cale URL relativă la rădăcină) și astfel calea URL rescrisă este rescrisă din nou și din nou...

Într-o Server context, ai putea scrie asa:

RewriteRule ^/files/(.+\.txt)$ /var/www/html/files/$1 [L]

(Dacă nu vă așteptați la subdirectoare ale fișierului /fișiere director, atunci regex-ul ar trebui să fie mai restrictiv, de ex. ([^/]+\.txt))

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.