将URL字符串传递给不带$ _GET变量的php

时间:2017-04-12 16:44:44

标签: php .htaccess url

在我的本地服务器(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

2 个答案:

答案 0 :(得分:0)

您可以使用此规则

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

它只是说匹配index.php/

之后输入的任何内容或所有内容

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

我希望这能解决你的问题!

答案 1 :(得分:0)

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

所以,你可以尝试:

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