.htaccess 共享主机上的symfony2

.htaccess 共享主机上的symfony2,.htaccess,mod-rewrite,symfony,shared-hosting,.htaccess,Mod Rewrite,Symfony,Shared Hosting,这件事我已经做了很长一段时间了,但是没有用。。我已将symfony安装在共享web主机上,在该主机上,我没有将DocumentRoot更改为web/文件夹的权限,因此我无法选择此选项 我已经写了我的htaccess RewriteEngine On RewriteBase / RewriteRule ^$ web/app.php [QSA] RewriteRule ^(.*)$ web/app.php/$1 [QSA, L] 我还尝试了RewriteBase-web/和RewriteBase/

这件事我已经做了很长一段时间了,但是没有用。。我已将symfony安装在共享web主机上,在该主机上,我没有将DocumentRoot更改为web/文件夹的权限,因此我无法选择此选项

我已经写了我的htaccess

RewriteEngine On
RewriteBase /
RewriteRule ^$ web/app.php [QSA]
RewriteRule ^(.*)$ web/app.php/$1 [QSA, L]
我还尝试了
RewriteBase-web/
RewriteBase/web/
这两种方法,但都没有效果

有了这个,symfony就开始工作了。。我可以登录,我可以做所有这些。。。唯一的问题是,没有任何资产显示。。。Chrome Developer Tools告诉我它找到了一个404,这是正确的,因为它没有将/web/文件夹作为DocumentRoot读取


那么,如何在不重新写入文件或任何东西的情况下解决此问题。。一定有办法做到这一点。仅限htaccess

一种方法是在
app/config.yml
中设置
assets\u base\u URL
,例如

framework:
    #..
    templating:      
        engines: ['twig']
        assets_base_urls: http://your.site.com/web/

或者,您可以将.htaccess文件放在DocumentRoot文件夹中,并相应地将其中的所有内容重写到/web文件夹中:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ /web/$1 [QSA,L]
</IfModule>

重新启动发动机
重写cond%{REQUEST_FILENAME}-F
重写规则^(.*)$/web/$1[QSA,L]

这样,您就可以获得干净的URL(省略“web”或“app.php”),并且无需使用配置中的资源库URL。

您应该使用symfony提供的原始htaccess,只需重新编写应用程序库即可。因为使用htaccess,所有指向静态资产的请求都使用重写规则进行处理。你的重写条件在哪里?好的,可以。。但现在有个问题要问你。。假设我有两个域名针对同一个symfony安装——同一个网站,所有东西都一样。。唯一的区别是,其中一个是针对app_dev.php的(该域的documentRoot已设置为/web/),但我希望资产仅在另一个域中显示:/web/,而不是我该怎么做?只需将assets\u base\u URL设置为web/就可以为任何在httpd级别设置的资源(在我的本地主机上尝试过)断开它,我就知道了。。。在我的config.yml中,我按照你说的做了,除了我制作了assets\u base\u url:web/然后在我的config\u dev.yml中,我刚刚放了:templating:assets\u base\u url:/刷新了这两个实例,它可以工作。。。美丽的;)-1.如果你看,这与路由无关。。。这一切都与由于路由差异导致的资产未正确显示有关。。。htaccess不能解决这个问题,而assets\u base\u url选项可以解决这个问题。享受。