我的laravel应用程序在localhost上运行良好,但现在已将我的应用程序移动到生产服务器,它不再识别通过URL传递的任何$ _GET变量。我的生产服务器设置为允许多个laravel安装,我使用vhost.conf文件和位于laravel根目录的.htaccess文件来处理重写。
的.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /international-experts/index.php/?$1 [L]
</IfModule>
vhost.conf
Alias /international-experts "/srv/http/international-experts/public"
<Directory /srv/http/international-experts>
Options Indexes Includes FollowSymLinks MultiViews
AllowOverride AuthConfig FileInfo Indexes
Order allow,deny
Allow from all
</Directory>
我测试它的方法是在多个页面上使用print_r($ _ GET)。没有。阅读问题,听起来像MultiViews可能是问题的一部分。我知道我并不是唯一一个在同一台服务器上处理多个laravel安装的人...还有其他人必须解决这个问题吗?
由于
答案 0 :(得分:2)
在重写规则
中RewriteRule ^(.*)$ /international-experts/index.php/?$1 [L]
你使用?$1
创建一个新的查询字符串,在这种情况下,默认行为是丢弃旧的查询字符串。您需要使用标记QSA
,您可以将其记为“查询字符串追加”
RewriteRule ^(.*)$ /international-experts/index.php/?$1 [L,QSA]
如果不足以解决您的问题,那肯定是其中的一部分。
答案 1 :(得分:0)
我遇到了$_GET[]
空的类似问题。主要是因为某处的服务器问题,我不得不使用$GET
来生成自己的$_SERVER['HTTP_REFERER']
。
//url='http://example.com/?search=john&location=london';
$get=array();
$query=mb_split("&",parse_url($_SERVER['HTTP_REFERER'],PHP_URL_QUERY));
if(!empty($query)) foreach ($query as $qr){
$vars=mb_split('=',$qr);
$get[$vars[0]]=$vars[1];
}
var_dump($get['search']);