【问题标题】:How to get URL string into PHP variable如何将 URL 字符串转换为 PHP 变量
【发布时间】:2012-04-20 23:29:41
【问题描述】:

让我们从一个例子开始:

所以请求的 URL 将是:www.domain.com/product/hdd/samsung

我想要一个重写规则来获取 index.php 并将 www.domain.com 之后的所有内容保存到 php 变量中。因此,替代页面将是例如 www.domain.com/index.php?query=product/hdd/samsung。但我无法编写正确的规则。

我试过这个:

RewriteRule ^/(.*)$ index.php?query=$1 [NC,L]

上面的代码不起作用。我想在 index.php 中使用 PHP 代码中的查询:

if(isset($_GET["query"] )) {
   $query=$_GET["query"];
}

我发现,有可能通过$_SERVER['QUERY_STRING'] 而不是mod_rewrite 获得$query,对吗?

对于我的 PHP 应用程序来说,变量 $query 很关键,因为它用于加载模板。

问题: 你会推荐我什么解决方案?要使用$_SERVER 变量还是mod_rewrite? 如果mod_rewrite,如何写正确的RewriteRule

谢谢

【问题讨论】:

  • 这条规则对我来说很好。您能否测试一些更简单的规则来验证重写规则模块是否已应用并正常运行?
  • 确保您在某处拥有RewriteEngine on
  • 重写引擎工作正常(开启)。如果我使用上面的规则,我会得到 404 错误。我正在本地主机(wamp 服务器)上对其进行测试。
  • 我能写的最好的规则是:RewriteRule /(.*) index.php?query=$1 [NC,L],但我只在第二个斜杠之后得到字符串(如果有是第二个斜线,否则我会收到 404 错误)。

标签: php regex .htaccess mod-rewrite


【解决方案1】:

试试这个:

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?query=$1 [NC,L]

如果您的站点不在服务器的根目录中,请将RewriteBase 更改为/some/subdir/

【讨论】:

  • 非常感谢!是的,它的工作!但它会删除参数,例如 www.domain.com/a/b/c?sort=price。 (我得到 index.php?query=a/b/c)。我需要以某种方式存储整个字符串(排序=价格)。最好的解决方案是获取 index.php?query=a/b/c&sort=price。我实际上只需要一个参数(排序)。有可能吗?
  • 我很确定我做错了什么,因为我无法通过重写规则获得?sort=price。就好像它从未存在过一样。所以我想到了直接用php解析那部分。使用 lafor 的代码,您请求正确的 php 文件,然后在该文件中,您将使用以下代码获得排序部分:pastebin.com/vLMNSCyK。我希望它有所帮助。
猜你喜欢
  • 2015-10-27
  • 2018-02-08
  • 1970-01-01
  • 1970-01-01
  • 2014-09-05
  • 1970-01-01
  • 2014-07-25
  • 2021-12-02
  • 1970-01-01
相关资源
最近更新 更多