Htaccess重定向问题,查询字符串参数不存在

时间:2017-09-21 10:18:12

标签: php apache .htaccess redirect mod-rewrite

我最近改变了我的托管。旧的服务器有php 5.3,而新的有php 5.6。主机的这种变化是使我的网站与PHP 7兼容的一步。

但是我遇到了htaccess重定向的问题。

我的htaccess文件如下所示

DirectoryIndex index.php
Options +FollowSymLinks
RewriteEngine On

RewriteRule ^company/([0-9]+)/?$    company.php?company_id=$1 [L]

所以,当我使用网址mydomain.com/admin/company/92

转到页面时

我似乎无法根据需要获取重定向的网址,例如mydomain.com/admin/company.php?company_id=92

这是打印$_SERVER

的部分输出
    [REDIRECT_SCRIPT_URL] => /admin/company/92/
    [SCRIPT_FILENAME] => /htdocs/myproj/admin/company.php
    [REDIRECT_URL] => /admin/company.php/92/
    [REQUEST_METHOD] => GET
    [QUERY_STRING] => 
    [REQUEST_URI] => /admin/company/92/
    [SCRIPT_NAME] => /admin/company.php
    [STATUS] => 200
    [ORIG_PATH_INFO] => /92/
    [ORIG_PATH_TRANSLATED] => /htdocs/myproj/admin/company.php
    [PHP_SELF] => /admin/company.php
    [argv] => Array
        (
        )

    [argc] => 0
)

我在本地获得了php 5.3,同样的代码在我的本地工作正常。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

这很可能是默认新主机启用选项MultiViews的效果。

你可以这样关掉它:

DirectoryIndex index.php
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /admin/

RewriteRule ^company/([0-9]+)/?$ company.php?company_id=$1 [L,NC,QSA]

选项MultiViews(请参阅http://httpd.apache.org/docs/2.4/content-negotiation.html)由Apache's content negotiation modulemod_rewrite之前运行使用,并使Apache服务器匹配文件扩展名。因此,如果/file是网址,那么Apache将提供/file.html