AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 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

如何使用 Mod Rewrite 访问非文档根文件夹文件?

  • 772

我的网站代码具有以下结构/var/www/html

-- files
---- test.txt

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

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

文档根目录设置为“/var/www/html/public”,但我也希望通过路径“http://mywebsite/files/test.txt”访问文件。

.htaccess我认为在里面的文件中使用 mod_rewrite 必须是可能的,public但我正在努力这样做。

我尝试向.htaccessLaravel 框架提供的默认规则添加一个规则。电流.htaccess如下所示:

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

当前结果是Internal Server Error尝试访问“http://mywebsite/files/test.txt”时。我有一种感觉,我可能错过了一些设置来公开“文件”文件夹,但我不知道该怎么做。

我被困住了,如果有人可以帮助我,我将不胜感激。

.htaccess mod-rewrite documentroot
  • 2 2 个回答
  • 338 Views

2 个回答

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

    您可以创建符号链接

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

    你将需要Options +FollowSymLinks这个工作。请注意,此选项会增加安全风险,因为它允许访问DocumentRoot.

    或者,您可以添加到此站点Alias /files /var/www/html/files的配置中。VirtualHost这是一个更安全的选择,但您不能使用.htaccess.

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

    除了@AlexD 的回答...

    认为这必须可以在.htaccess文件中使用 mod_rewrite

    这可以使用 mod_rewrite,但不能在.htaccess. 您需要直接在主服务器配置(或 VirtualHost 容器)中执行此操作。

    在目录(或.htaccess)上下文中,您只能重写为 URL 路径。但是,在服务器(或虚拟主机)上下文中,您可以重写为 URL 路径或绝对文件系统路径。

    但是,这不是您的原因Internal Server Error...

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

    这很可能导致重写循环(因此 500 内部服务器错误响应),因为未锚定RewriteRule 模式也匹配替换字符串(相对于根的 URL 路径),因此重写的 URL 路径被一次又一次地重写。 .

    在服务器上下文中,您可以这样编写:

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

    (如果您不期望目录的子目录,/files则应该使正则表达式更具限制性,例如。([^/]+\.txt))

    • 1

相关问题

  • apache重写以将文件夹分配给域

  • Apache conf 或 .htaccess 规则将 404 重定向到特定文件类型的另一个位置

  • 如何让 Apache2 重定向到子目录

  • .htaccess - 删除所有 cookie

  • 我的 .htaccess 文件是什么意思?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

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

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve