这应该非常简单,但我希望能够像 php 框架那样将 url 用作变量。
mywebsite.com/hello-world
我希望我的 index.php 将“hello-world”视为一个变量,并且我希望加载 index.php。这是通过 php 完成的还是我必须使用 htaccess 文件?
许多 php 框架使用 url 向索引文件发送消息...例如...
mysite.com/controller/view
我自己如何通过 php 路由它们?
一点帮助?
最佳答案
有两个步骤:
- 使用
.htaccess
文件重写 url(在 linux 上)。您需要确保所有请求都转到您的 php 文件,因此您需要将所有对不存在的文件和文件夹的请求重写到您的 php 文件; - 在您的 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]
然后在第 2 步的 php 文件中。您在 $_GET['url']
中有请求的 url。
编辑:
如果你只想重写某些子目录,你也可以使用这样的规则:
RewriteRule ^sub/dir/to/rewrite/(.*)$ your_file.php?url=$1 [L,QSA]
一些细节:
^(.*)$
捕获开始^
和结束$
之间的所有内容(所有字符)。它们是使用括号捕获的,因此您可以在查询字符串中使用它们,如$1
。在编辑的例子中,只有..../rewrite/
之后的部分被捕获;[ ... ]
之间的选项表示它是L
最后要处理的规则,QSA
表示原始查询字符串是也添加到新的网址。这意味着如果你的 url 是/hello-world?some_var=4
some_var
变量被附加到重写的 url:your_file.php?url=hello -world&some_var=4
.
关于PHP 将 url 传递给 index.php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17246714/