我的网站代码具有以下结构/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
但我正在努力这样做。
我尝试向.htaccess
Laravel 框架提供的默认规则添加一个规则。电流.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”时。我有一种感觉,我可能错过了一些设置来公开“文件”文件夹,但我不知道该怎么做。
我被困住了,如果有人可以帮助我,我将不胜感激。
您可以创建符号链接
你将需要
Options +FollowSymLinks
这个工作。请注意,此选项会增加安全风险,因为它允许访问DocumentRoot
.或者,您可以添加到此站点
Alias /files /var/www/html/files
的配置中。VirtualHost
这是一个更安全的选择,但您不能使用.htaccess
.除了@AlexD 的回答...
这可以使用 mod_rewrite,但不能在
.htaccess
. 您需要直接在主服务器配置(或 VirtualHost 容器)中执行此操作。在目录(或
.htaccess
)上下文中,您只能重写为 URL 路径。但是,在服务器(或虚拟主机)上下文中,您可以重写为 URL 路径或绝对文件系统路径。但是,这不是您的原因
Internal Server Error
...这很可能导致重写循环(因此 500 内部服务器错误响应),因为未锚定
RewriteRule
模式也匹配替换字符串(相对于根的 URL 路径),因此重写的 URL 路径被一次又一次地重写。 .在服务器上下文中,您可以这样编写:
(如果您不期望目录的子目录,
/files
则应该使正则表达式更具限制性,例如。([^/]+\.txt)
)