AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 1088542
Accepted
cr001
cr001
Asked: 2021-12-30 22:25:36 +0800 CST2021-12-30 22:25:36 +0800 CST 2021-12-30 22:25:36 +0800 CST

Como usar o Mod Rewrite para acessar arquivos de pasta não raiz do documento?

  • 772

Eu tenho a seguinte estrutura para os códigos do meu site em/var/www/html

-- files
---- test.txt

-- app
---- SomePhpCodes.php
---- SomePhpCodes.php

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

A raiz do documento está definida como "/var/www/html/public", mas também quero que os arquivos sejam acessíveis pelo caminho "http://mywebsite/files/test.txt".

Acho que isso deve ser possível usando mod_rewrite no .htaccessarquivo interno public, mas estou lutando para fazer isso.

Tentei adicionar uma regra ao padrão .htaccessque é fornecido pelo framework Laravel. A corrente .htaccessse parece com o seguinte:

<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>

O resultado atual é Internal Server Errorao tentar acessar "http://mywebsite/files/test.txt". Tenho a sensação de que posso ter perdido algumas configurações para tornar a pasta "arquivos" pública, mas não tenho ideia de como fazê-lo.

Estou travado e se alguém puder me ajudar eu agradeço.

.htaccess mod-rewrite documentroot
  • 2 2 respostas
  • 338 Views

2 respostas

  • Voted
  1. Best Answer
    AlexD
    2021-12-30T23:33:58+08:002021-12-30T23:33:58+08:00

    Você pode criar um link simbólico

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

    Você vai precisar Options +FollowSymLinkspara que isso funcione. Observe que esta opção adiciona um risco de segurança, pois permite acessar arquivos fora do DocumentRoot.

    Alternativamente, você pode adicionar Alias /files /var/www/html/filesà sua VirtualHostconfiguração para este site. É uma opção mais segura, mas você não pode fazer isso com .htaccess.

    • 2
  2. MrWhite
    2021-12-31T17:52:38+08:002021-12-31T17:52:38+08:00

    Além da resposta do @AlexD...

    acho que isso deve ser possível usando mod_rewrite no .htaccessarquivo

    Isso é possível usando mod_rewrite, mas não em .htaccess. Você precisaria fazer isso diretamente na configuração do servidor principal (ou contêiner VirtualHost).

    Em um contexto de diretório (ou .htaccess) você está restrito a reescrever apenas para um caminho de URL. No entanto, em um contexto de servidor (ou virtualhost ), você pode reescrever para um caminho de URL ou um caminho absoluto do sistema de arquivos.

    No entanto, esta não é a causa do seu Internal Server Error...

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

    Isso provavelmente está resultando em um loop de reescrita (daí a resposta 500 Internal Server Error) porque o RewriteRule padrão não ancorado também corresponde à string de substituição (um caminho de URL relativo à raiz) e, portanto, o caminho de URL reescrito é reescrito várias vezes. .

    Em um contexto de servidor , você pode escrever assim:

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

    (Se você não espera subdiretórios do /filesdiretório, o regex deve ser mais restritivo, por exemplo. ([^/]+\.txt))

    • 1

relate perguntas

  • Como obter o Apache2 para redirecionar para um subdiretório

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve