symfony1,托管,文档根和apache mod_rewrite

时间:2013-05-03 19:40:14

标签: apache mod-rewrite symfony1 hosting

我已经阅读了很多相关信息,但我无法使其发挥作用,因此,我发布了一个问题

我有一个Symfony1项目有2个应用程序(前端,管理员),托管文档根目录是public_html,因此文件夹结构如下所示:

/public_html
|--/apps/
|--/cache/
|........
|--/web/

支持团队告诉我他们不能为我更改文档根目录,因此,我所要做的就是开始尝试.htaccess,这就是我所做的:

RewriteEngine on
AddHandler application/x-httpd-php53 .php
RewriteBase /web/

RewriteCond %{REQUEST_URI} ^/admin.php
RewriteRule ^(.*)$ /web/admin.php/$1 [QSA,L]

RewriteRule ^(.*)$ /web/$1 [QSA,L]

这样可行,但是symfony会生成带有/web的网址,因此,我创建了一个从sfPatternRouting扩展的自定义类,覆盖generate函数返回如下内容:< / p>

public function generate($name, $params = array(), $absolute = false) {
    $url = parent::generate($name, $params, $absolute);
    $pattern = '/\/web\//';
    return preg_replace($pattern,'/', $url);
}

然后再次正常工作,我有漂亮的网址并且工作正常,但是,当我尝试访问http://my.domain.com/admin.php/时,我得到404 Page not found error并且所有管理员应用都无效,网址为{ {1}}相同的结果,总是一样的,所以,我在我的本地电脑中重新创建相同的环境,并且工作正常,但在托管中它不起作用。

那么,我制作的.htaccess配置应该有效吗?我是否需要更多条件并重写规则才能按照我想要的方式工作? /admin.php/services文件夹中的.htaccess会影响吗?

托管是www.bluehost.com
需要一些帮助 感谢

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望将所有请求重定向到/ web文件夹。

RewriteEngine on
AddHandler application/x-httpd-php53 .php

RewriteCond %{REQUEST_URI} !^/web(/|$)
RewriteRule ^(.*)$ /web/$1 [QSA]

您的托管服务提供商可能需要此行。请注意,我从之前的RewriteRule中删除了[L],这允许下一个规则起作用:

RewriteRule ^(.+\.php[45]?)/ $1 [QSA]

如果最终将您发送到错误的页面,则需要确定页面对传统(非mod_rewrite)导航所采用的查询字符串,然后插入该页面。假设它是page

RewriteRule ^(.+\.php[45]?)(/.*)$ $1?page=$2 [QSA]