有没有办法像 GET 数据一样在 URL 中传递变量?例如,用斜线?
我目前有一个 .php 文件,它使用 javascript 重新加载具有不同内容的 div 来导航页面,但正如您可以想象的那样,地址栏中的地址保持不变。
我希望用户能够链接到不同的页面,但如果只查看一个文件,这通常是不可能的。
有没有办法像 GET 数据一样在 URL 中传递变量?例如,用斜线?
我目前有一个 .php 文件,它使用 javascript 重新加载具有不同内容的 div 来导航页面,但正如您可以想象的那样,地址栏中的地址保持不变。
我希望用户能够链接到不同的页面,但如果只查看一个文件,这通常是不可能的。
这样的事情可能会奏效;
把它放在 /yourdir/
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ yourindexfile.php?string=$1 [QSA,L]
所有请求都将yourindexfile.php
通过 URL 发送到。就这样http://localhost/yourdir/levelone
变成了yourindexfile.php?string=levelone
。
您将能够像这样分解字符串;
$query= explode('/', rtrim($_GET['string'], '/'));
您正在寻找的技术是.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 数据一样工作。
您使用 php 文件获取此数据,$_GET['tab']
并且$_GET['name']
我认为 Symfony路由组件是您所需要的;)可用作独立组件,它为您的路由提供强大的动力。
我正在这样做(在我喜欢的框架中,它是JREAM 框架的一个分支):
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] 第二个等等......
您可能想要使用与 Apache 的 mod_rewrite 功能类似的东西。
尝试使用:
$_SERVER['QUERY_STRING']; // Or
$_SERVER['PHP_SELF'];
如果这没有帮助,请发布您尝试完成的 URL 类型的示例。