RewriteRule在本地工作,但不在现场工作

时间:2017-05-23 13:59:22

标签: .htaccess silex

我在以下网址中设置了本地网站(Silex应用):http://local.exmaple.com/web/index.php

我需要从网址中删除/web部分,并且当放置在项目根目录(.htaccess)中时,以下../web完成了此目标:

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

除了上述本地站点之外,我还需要在实时服务器上设置一个相同的站点,我需要完成从URL中删除/web/的相同任务。

测试站点位于以下位置: http://www.otherexample.com/mango/test/web/index.php

虽然.htaccess在本地环境中运行良好,但无法删除/重定向到实时测试站点上的Web目录。

我想知道是否有人知道这是为什么以及如何解决这个问题。

谢谢

2 个答案:

答案 0 :(得分:0)

在实时服务器上,只需将您的RewriteRule更改为mango/test/.htaccess

RewriteEngine On

RewriteRule .* web/$0 [L]

这假设您在mango/test/web/子目录中有一个单独的.htaccess。

答案 1 :(得分:0)

我不知道你的问题是否已经解决。因为我遇到了同样的问题,所以我会给你解决方案。

在我看来,你只需做出这个小小的调整:

RewriteEngine On
RewriteRule ^(.*)$ web/$1 [L]

正如您所说:将其放在项目的根文档中。此外,检查可能有问题的是您的/ web文件夹中的另一个.htaccess。确保这些是重定向到index.php文件的代码行:

Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]

然后,最后但并非最不重要的是,你是如何分配路线的?因为,当你启用调试时,我假设你做了,你可以得到'找不到这条路线'的消息。那可能是因为您分配了错误的路线。并且不要说我错了,因为我遇到了完全相同的问题。在XAMPP上使用项目时,必须将它们分配为“Project / public / #route”,但当我在服务器中时,我不得不像'#route'那样分配它们。

所以,为了解决这个问题,我建议采用以下解决方案:

<?php

require_once __DIR__.'/../vendor/autoload.php';

$app = new Silex\Application();
$app['debug'] = true;

$routes = $app['controllers_factory'];

现在,分配您的路线,如下例所示:

$routes->match('/', function (Request $request) use ($app) {

    return $app['twig']->render('home.twig');

})->bind('home');

使用以下代码行关闭index.php:

$app->mount('#baseURL', $routes);
$app->run();

您应该为#baseURL尝试一些值,在本地服务器上可能会有以下内容:

$app->mount('/', $routes);

在您的网络服务器上试试:

$app->mount('/Project/', $routes);
$app->mount('/Project/web/', $routes);

请告诉我这是否解决了您的问题。如果是,请标记为已完成,否则请对新问题发表评论!

修改

使用这样的东西不是问题:

$routes->get('/', function (Request $request) use ($app) {

    return $app['twig']->render('home.twig');

})->bind('home');

你只需要使用$ routes而不是$ app