【问题标题】:URL parameters with PHP使用 PHP 的 URL 参数
【发布时间】:2013-07-13 12:04:47
【问题描述】:

有没有办法像 GET 数据一样在 URL 中传递变量?例如,用斜线?

我目前有一个 .php 文件,它使用 javascript 重新加载具有不同内容的 div 来导航页面,但正如您可以想象的那样,地址栏中的地址保持不变。

我希望用户能够链接到不同的页面,但如果只查看一个文件,这通常是不可能的。

【问题讨论】:

  • 您可以获取$_SERVER['QUERY_STRING'] 的值并以您想要的任何方式解析它。
  • 请提供一些您想要的 URL 示例
  • 请举例说明所需的网址。听起来您在询问 PATH_INFO 或远程 hashbang 标识符。
  • 'wesbtie.com/user/john' 然后我可以像 GET 数据一样操作 'user' 和 'john'。

标签: php javascript apache address-bar


【解决方案1】:

我正在这样做(在my 类似的框架中,它是JREAM framework 的一个分支):

RewriteEngine On

#When using the script within a subfolder, put this path here, like /mysubfolder/
RewriteBase /mysubfolder/

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

然后拆分不同的 URL 段:

$url = isset($_GET['url']) ? $_GET['url'] : null;
$url = rtrim($url, '/');
$url = filter_var($url, FILTER_SANITIZE_URL);
$url_array = explode('/', $url);

现在 $url_array[0] 通常定义你的控制器,$url_array[1] 定义你的动作,$url_array[2] 是第一个参数,$url_array[3] 第二个等等......

【讨论】:

    【解决方案2】:

    我认为 Symfony Routing Component 是您所需要的 ;) 可用作独立组件,它为您的路由提供动力。

    【讨论】:

      【解决方案3】:

      您正在寻找的技术是.htaccess。从技术上讲这是不可能的,所以你必须破解你的 mod 重写来完成这个。

        RewriteRule On +FollowSymLinks
        RewriteCond %{SCRIPT_FILENAME} !-d  
        RewriteCond %{SCRIPT_FILENAME} !-f 
        RewriteRule ^(user)/([^\.]+)$ ./index.html?tab=user&name=$2
      

      将此添加到您的顶级目录中的 .htaccess 页面。您将不得不稍微改变您的网站结构。假设 index.html 是您的索引。这是一种向后重写,因此如果要使用查询字符串转到页面,它不会将它们重定向到前一页,如果转到没有查询字符串的页面,它仍然会像 GET 数据一样工作。

      您使用$_GET['tab']$_GET['name'] 使用您的php 文件获取此数据

      【讨论】:

        【解决方案4】:

        这样的事情可能会奏效;

        把它放在 /yourdir/

        RewriteEngine On
        
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-l
        
        RewriteRule ^(.+)$ yourindexfile.php?string=$1 [QSA,L]
        

        所有请求都将通过 URL 发送到 yourindexfile.php。所以http://localhost/yourdir/levelone 变成了yourindexfile.php?string=levelone

        你可以像这样分解字符串;

        $query= explode('/', rtrim($_GET['string'], '/'));
        

        【讨论】:

          【解决方案5】:

          尝试使用:

          $_SERVER['QUERY_STRING']; // Or
          $_SERVER['PHP_SELF'];
          

          如果这没有帮助,请发布您尝试完成的 URL 类型的示例。

          【讨论】:

          • 都不行。第一个依赖于他不想要的查询,除非脚本名称可以像 /user/(anything) PHP_SELF 这样动态更改,否则也不会工作。
          【解决方案6】:

          您可能想要使用与 Apache 的 mod_rewrite 功能类似的东西。

          这个页面有一个很好的例子http://www.dynamicdrive.com/forums/showthread.php?51923-Pretty-URLs-with-basic-mod_rewrite-and-powerful-options-in-PHP

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-11-03
            • 2017-01-21
            • 2017-04-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-06-28
            • 2013-03-30
            相关资源
            最近更新 更多