我的文件结构如下:
app
/some
/private
/app
/directories
public
/assets
/images
/js
/css
index.php (app entry point)
robots.txt
如果有人尝试访问/app/*
中的任何内容(存在或不存在),请求将被重新路由到/public/index.php
。
如果有人尝试访问/public
目录中的任何*现有文件,则可以。
所有其他内容都路由到/public/index.php
。
这就是我所拥有的:
# If not an existing file
RewriteCond %{REQUEST_FILENAME} !-f
# Allow access to the public directory
RewriteRule ^(public)($|/) - [L]
# Redirect everything to this file
RewriteRule ^ public/index.php [QSA,L]
RewriteBase /
这对我来说非常有用,但是我需要做的是如果public
目录中存在一个文件,我希望能够像这样访问它:
site.com/robots.txt
site.com/images/image.jpg
现在,我必须使用:
site.com/public/robots.txt
site.com/public/images/image.jpg
如何修改这些规则,以使无需在路径/ URL中使用public
就能访问/public
目录中的任何现有文件?
答案 0 :(得分:0)
您可以在网站根.htaccess中使用以下规则:
RewriteEngine On
# If file exists in public directory then rewrite to public/...
RewriteCond %{DOCUMENT_ROOT}/public/$1 -f
RewriteRule ^(.+?)/?$ public/$1 [L]
# Redirect everything to this file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ public/index.php [L]