我的网站托管在:
domain.com/dir1/dir2
文件系统(符号链接' d)内部映射到:
的/ var / WWW /根目录/东西/网络
在该目录中是我的应用程序的index.php,所有请求都应该路由到该目录。我在该目录中有一个.htaccess文件,其中包含以下内容:
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
</IfModule>
这很好用,我的应用程序功能和所有网址都可以访问。问题是应用程序硬编码资产的所有路径。例如,当HTML呈现时,CSS被引用为:
<link href="/assets/css/app.css" rel="stylesheet">
实际上文件在/var/www/webroot/something/web/assets/css/app.css
处于文件系统的物理位置,因此引用该文件的URL为:domain.com/dir1/dir2/assets/css/app.css
我可以用.htaccess以某种方式解决这个问题吗?
我尝试过以下方法:
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/assets
RewriteRule ^ index.php [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} ^/assets
RewriteRule ^(.*)$ /dir/dir2$1 [L]
</IfModule>
这次尝试背后的逻辑是我可以让第一条规则处理应用程序路由。但第二条规则将确保任何请求图像的尝试都从正确的路径加载它们。不幸的是,请求转到域的webroot .htaccess无效。我也不可能在.com.com上放置.htaccess。
我有什么选择?
答案 0 :(得分:0)
您应该在资源网址前加上请求基本网址。
$app['request']->getBaseUrl();
如果您使用的是Twig,可以使用:
app.request.baseUrl
顺便说一句,Silex TwigServiceProvider documentation说:
您必须预先添加app.request.baseUrl才能进行调用 确保在部署到docroot的子目录时渲染工作。
答案 1 :(得分:0)
尝试从原始请求行中捕获路径
RewriteCond %{THE_REQUEST} \s(/assets/\S+)\s
RewriteRule ^ /dir/dir2%1 [L]