【问题标题】:Htaccess redirect issue with query string param not being查询字符串参数不存在的 Htaccess 重定向问题
【发布时间】:2017-09-21 10:18:11
【问题描述】:

我最近更换了主机。旧服务器有 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]

所以当我使用 url mydomain.com/admin/company/92 访问页面时

我似乎没有获得所需的重定向 URL,即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,并且相同的代码在本地运行良好。我该如何解决这个问题?

【问题讨论】:

  • in ^company ^ 将其粘贴到字符串的开头。因此,company 之前的任何内容都会使其无法匹配。例如,您可以将其更改为 RewriteRule /company/([0-9]+)/?$ /company.php?company_id=$1 [L]
  • 我尝试删除 ^ 但在 QUERY_STRING 中仍然没有得到任何内容

标签: php apache .htaccess redirect mod-rewrite


【解决方案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)由运行之前 mod_rewriteApache's content negotiation module 使用,并使Apache 服务器匹配文件的扩展名。因此,如果 /file 是 URL,那么 Apache 将提供 /file.html

【讨论】:

  • 嗨 Anubhav,我按照上面的方法进行了更改,但 [QUERY_STRING] => .... 在我的本地 php 5.3 中我仍然可以看到 [QUERY_STRING] => company_id =92
  • 你是对的。它似乎没有在目录级别启用!!!!谢谢你。我现在会打电话给我的托管公司并启用它。我认为这很可能是问题所在。没想到先检查一下,我真是太傻了。
  • 我的错误 - htaccess 已启用,但我在错误的文件中进行了更改。我现在在正确的文件中进行了上述更改,我收到 500 个内部服务器错误(即在添加 -mulitviews 和 [L, NC, QSA] 之后。请告知。非常感谢您的时间。
  • 你还能想到其他的改变吗?我曾尝试与托管客户服务部交谈,但我没有任何运气。谢谢。
  • 我再次使用 -MultiViews 并使用 [L, NC, QSA, R] - 当我转到 mydomain.com/admin/company/92 时,它会将我重定向到 mydomain.com/kunden/homepages/ 121/46545/htdocs/mypoject/admin/company.php?company_id=92 .... 所以它到达那里只需要确保重定向只到 mydomain/admin/company.php?company_id=92
猜你喜欢
  • 1970-01-01
  • 2015-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-27
  • 1970-01-01
相关资源
最近更新 更多