【问题标题】:PHP Obtain the URL as a variablePHP 获取 URL 作为变量
【发布时间】:2012-08-31 14:39:14
【问题描述】:

我注意到许多网站使用以

结尾的网址
website.com/index.php?var="value"&var2="value2"

我想知道如何做到这一点,而不是将其作为 URL 的结尾,而是:

website.com/value/value2

然后拥有它,而不是在服务器根文件夹中搜索“/value/value2”,而是只需打开 index.php 然后在 PHP em> 编码有一个函数可以获取 URL 是什么。无论是作为字符串“/value/value2”还是数组“value”“value2”都无关紧要,只是获取这些变量的某种方式。这样一来,URL 就可以被清理,并且可以很容易地分辨出您在网站中的位置。

另外,如果有办法做到这一点,那么 style.php 是否可能与 index.php 位于同一文件夹中(但有一个 PHP header 将其设置为输出 CSS) 将在 index.php 的头部使用<link rel="stylesheet" type="text/css" url="style.php" /> 或其他任何语法调用,能够获得相同的变量,以便可以根据 URL 更改 css 样式。

【问题讨论】:

标签: php html css .htaccess mod-rewrite


【解决方案1】:

您可以在 .htaccess 文件中使用重写 url

检查一下。

RewriteEngine on
RewriteRule ^([^/]+)/([^/]+)/([^/]+) /?var=$1&var2=$2 [L]

这分为三个部分:

  1. RewriteRule 指定这是用于重写的规则(与条件或其他指令相反)。命令是将第 2 部分改写为第 3 部分。
  2. 这部分是一个正则表达式,只有当 URL 匹配这个正则表达式时,规则才会运行。在这种情况下,它说 - 查找字符串的开头,然后是一堆非斜线字符,然后是一个斜线,然后是另一束非斜线字符。然后又是一堆非斜线字符,然后是一个斜线,然后是另一束非斜线字符。括号表示括号内的部分将被存储以供将来参考。
  3. 最后,这部分说以这种格式重写给定的 URL。 $1 和 $2 指的是被捕获和存储的部分。

请参阅Beginner's Guide to mod_rewrite。 同样tutorial

【讨论】:

    【解决方案2】:

    您需要重新编写 URL。如果您使用的是 apache,则必须在 .htaccess 文件中添加更改。检查this 和这个manual

    【讨论】:

      【解决方案3】:

      如果使用 apache,启用 mod_rewrite 并使用 .htaccess

      RewriteEngine on
      
      RewriteCond %{SCRIPT_FILENAME} !-f
      RewriteCond %{SCRIPT_FILENAME} !-d
      RewriteRule ^(.*)$ /index.php [L]
      

      如果使用 nginx,请使用 nginx_rewrite_module http://nginx.org/ru/docs/http/ngx_http_rewrite_module.html

      在你的 index.php 解析 $_SERVER['REQUEST_URI'] 变量中,它将包含请求的 url。

      【讨论】:

        【解决方案4】:

        这很容易实现。问号之后的所有内容都称为 $_GET 变量。所以你可以调用 $_GET['var'] 或 $_GET['var2'] 来获取它们的值。

        例如。我有网址:http://www.example.com?username=username&password=password

        现在我可以获取该网址并使其成为这样:

        <?php
        $user = $_GET['username'];
        $pass = $_GET['password'];
        $newUrl = 'http://www.example.com/' . $user . '/' . $pass;
        echo '<a href="' . $newUrl . '">Link text here</a>';
        ?>
        

        这会生成一个基于 $_GET 变量的格式化网址:http://www.example.com/username/password

        【讨论】:

        • 老实说,这是最简单的方法。你已经有了 url 根和 $_GET 数组,所以为什么不使用你所拥有的而不是制作一个毫无意义的正则表达式。使用或不使用我的答案是你的选择,但我这样做是为了谋生,这就是我会做的。
        • 我更新了我的帖子以反映您的要求。回显将创建:此处链接文本
        • 这个链接(www.example.com/username/password)将页面带到哪里?
        • 如果你看这个问题,你会明白他在问什么。这是采用 $_GET 变量并将它们更改为目录。它来自标题('位置:...')或链接。
        猜你喜欢
        • 2014-02-02
        • 2016-01-26
        • 2012-07-27
        • 2013-03-04
        • 2013-10-02
        • 2015-07-30
        • 2015-12-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多