【问题标题】:Grab each forward slash as parameter with .htaccess使用 .htaccess 获取每个正斜杠作为参数
【发布时间】:2012-12-03 16:05:36
【问题描述】:

我有这个 .htaccess 代码:

Options +FollowSymLinks  
RewriteEngine On  
RewriteCond %{SCRIPT_FILENAME} !-d  
RewriteCond %{SCRIPT_FILENAME} !-f  
RewriteRule ^([\w-]+)/*$ ./index.php?page=$1 

这允许在正斜杠之后附加一个参数,并在 PHP 中用作$_GET,如下所示:

网址:

http://www.url.com/home

PHP:

<?php
    echo $_GET['home'];
?>

我的问题是,如何获取每个正斜杠并将该值作为新的 $_GET 传递给 PHP 使用?我假设问题将使用正则表达式解决方案,但由于我不了解正则表达式,我无法弄清楚。

只是举例说明,我想要这个:

http://www.url.com/param1/param2/param3

翻译成:

$_GET['param1'];
$_GET['param2'];
$_GET['param3'];

等等等等

【问题讨论】:

  • 将它作为一个简单的单个字符串传递,然后在 PHP 中 explode() 它。这样比尝试提出一个可以处理任意数量参数的 mod_rewrite 容易得多。
  • 感谢您的建议。如果我想要一组可以更改的参数会有所帮助吗?例如:http://www.url.com/category-name/post-alias,当然翻译为类别名称和帖子 ID 或别名。

标签: php apache .htaccess url-rewriting


【解决方案1】:

这是一个想法:

RewriteEngine On
RewriteRule ^([a-zA-Z0-9-=_.]+)/([a-zA-Z0-9-=_.]+)/([a-zA-Z0-9-=_.]+)/?$   http://www.example.com/index.php?par1=$1&par2=$2&par3=$3 [L]

不能使用 (.*),因为包含斜线。

【讨论】:

  • 那里缺少第三个)
  • 我理解这个问题,因此可能会出现任意数量的斜线。
  • 而且...为什么要寻找文字字符串'param...'?
  • @Marc 谢谢。已更正。不过,你的想法要好得多。
  • $arkascha 可以是任何东西,这只是一个想法。我会修改它。
【解决方案2】:

不要在重写模块中这样做。

改为对您的脚本进行简单的重写并访问其中的原始请求 ($_SERVER['HTTP_REQUEST_URI'])。您将获得在请求中指定的路径,您可以使用 explode() 函数在斜杠处分隔该路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    相关资源
    最近更新 更多