【问题标题】:Pass URL string to php without $_GET variable在没有 $_GET 变量的情况下将 URL 字符串传递给 php
【发布时间】:2017-04-12 16:44:43
【问题描述】:

在我的本地服务器 (XAMPP) 上,文件 .htaccess 的内容是:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^([^/.]+?)(/.+)?$ index.php/$1 [L]

在服务器上上传这个文件后,我不能再传递参数了。我收到一条消息“找不到文件。”

例如在本地服务器上,我传递给 url:www.foo.com/admin。并且 PHP 变量 $_SERVER["PATH_INFO"] 等于 "admin"

不幸的是,这在服务器上不起作用。有人能解释一下原因吗?

我不想使用这条规则#RewriteRule ^([^/.]+?)(/.+)?$ index.php?$1 [L]。因为那时我不能传递 $_GET 参数。 www.foo.com/admin?id=1

【问题讨论】:

  • 对于问题末尾的规则,您必须添加QSA flag
  • @GrasDouble 谢谢!你救了我!

标签: php .htaccess url


【解决方案1】:

(我不会评论 ^([^/.]+?)(/.+)?$ 部分,但我想它可能过于复杂。)

所以,你可以试试:

                                       ↓↓       ↓↓↓
RewriteRule ^([^/.]+?)(/.+)?$ index.php?/$1 [L, QSA]
  • 根据我自己的经验,您可以在某些服务器上省略?,但添加它会更加兼容。
  • 然后,您需要QSA flag,这样就不会删除客户端的查询字符串。
  • 您不应该省略斜线,并使用?/$1,这样应用程序可以更好地确定重写查询字符串的哪一部分是关于URL 美化的。例如,如果您转到example.org/controller?foobar,则重写后的查询字符串将为?/controller&foobar

【讨论】:

    【解决方案2】:

    你可以使用这条规则

    RewriteRule ^(.*)$ index.php?/$1 [L]
    

    它只是说匹配index.php/之后输入的任何内容或所有内容

    [L] 告诉服务器在应用该规则后停止重写

    希望这能解决你的问题!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-19
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 2013-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多