htaccess规则将所有请求重定向到目录

时间:2018-06-22 16:58:11

标签: apache .htaccess mod-rewrite

我的文件结构如下:

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目录中的任何现有文件?

1 个答案:

答案 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]