我在共享主机上有一个php框架,这是我的目录结构:
root (can't change because of shared hosting; here's the .htaccess)
vendor
web (index.php, assets in subfolders like css, images or js)
我的.htaccess看起来像这样:
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ web/index.php [L]
</IfModule>
现在框架路由工作正常,但我希望Apache只在web文件夹中搜索所有现有文件(${REQUEST_FILENAME} !-f
),而不是从根级别搜索。
示例:
http://www.domain.tld/hello/world(虚拟路径)被重写为index.php
找不到http://www.domain.tld/css/bootstrap.css,因为该文件位于web / css文件夹中。
由于RewriteCond %{REQUEST_FILENAME} !-f
,http://www.domain.tld/web/css/bootstrap.css会匹配
是否可以将RewriteCond %{REQUEST_FILENAME} !-f
与现有文件的文件夹重写相结合?必须将所有其他请求重写为index.php
总而言之,我希望它类似于将VirtualHost-&gt; DocumentRoot设置为web文件夹。
谢谢!
答案 0 :(得分:1)
您可以在站点根目录中使用这些规则.htaccess:
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteBase /
RewriteRule ^/?$ web/index.php [L]
# if file is found in web/ folder then route it
RewriteCond %{DOCUMENT_ROOT}/web/$1 -f
RewriteRule ^(.+)$ web/$1 [L]
# otherwise route it to web/index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ web/index.php [L]
</IfModule>