PHP 将 url 传递给index.php

Jos*_*eph 5 php .htaccess

这应该非常简单,但我希望能够像 php 框架一样使用 url 作为变量。

mywebsite.com/hello-world
Run Code Online (Sandbox Code Playgroud)

我希望我的index.php 将“hello-world”视为变量,并且我希望加载index.php。这是通过 php 完成的还是必须使用 htaccess 文件?

许多 php 框架使用 url 向索引文件发送消息...例如...

mysite.com/controller/view
Run Code Online (Sandbox Code Playgroud)

我如何通过 php 自己路由这些?

一点帮助?

jer*_*oen 3

有 2 个步骤:

  1. 使用文件重写 url .htaccess(在 Linux 上)。您需要确保所有请求都发送到您的 php 文件,因此您需要将对不存在的文件和文件夹的所有请求重写到您的 php 文件;
  2. 在您的 php 文件中,您分析 url(例如使用$_SERVER['REQUEST_URI'])并根据其内容采取操作。

对于第 1 步,您可以使用以下内容:

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ your_file.php?url=$1 [L,QSA]
Run Code Online (Sandbox Code Playgroud)

然后在步骤 2 中的 php 文件中,您将请求的 url 放在$_GET['url'].

编辑:

如果您只想重写某些子目录,您还可以使用如下规则:

RewriteRule ^sub/dir/to/rewrite/(.*)$ your_file.php?url=$1 [L,QSA]
Run Code Online (Sandbox Code Playgroud)

一些细节:

  • ^(.*)$捕获 start^和 end之间的所有内容(所有字符) $。它们是使用括号捕获的,以便您可以在查询字符串中使用它们,例如$1. ..../rewrite/在编辑的示例中,仅捕获之后的部分;
  • 之间的选项[ ... ]意味着它是L要处理的最后一条规则,并且QSA原始查询字符串也被添加到新的 url 中。这意味着,如果您的 url 是/hello-world?some_var=4变量some_var,则会将其附加到重写的 url: 中your_file.php?url=hello-world&some_var=4