我已经阅读了很多相关信息,但我无法使其发挥作用,因此,我发布了一个问题
我有一个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
需要一些帮助
感谢
答案 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]