Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用htaccess从URL中删除变量名?_Php_Url_.htaccess_Mod Rewrite - Fatal编程技术网

Php 如何使用htaccess从URL中删除变量名?

Php 如何使用htaccess从URL中删除变量名?,php,url,.htaccess,mod-rewrite,Php,Url,.htaccess,Mod Rewrite,因此,基本上我希望用户能够使用类似于/45678的URL访问我的网站,而不必使用/?p=45678,所以我只想删除变量名。我尝试过使用mod_rewrite,但它似乎只用于在访问页面时删除名称 以下是当前代码: RewriteEngine On RewriteCond %{QUERY_STRING} ^p=([0-9]+=$ RewriteRule ^/$ /%1 [R] 只需将所有链接更改为/45678,而不是?p=45678。还是我完全误解了你?因为我从你的帖子中得到的信息是,它工作

因此,基本上我希望用户能够使用类似于
/45678
的URL访问我的网站,而不必使用
/?p=45678
,所以我只想删除变量名。我尝试过使用mod_rewrite,但它似乎只用于在访问页面时删除名称

以下是当前代码:

RewriteEngine On 

RewriteCond %{QUERY_STRING} ^p=([0-9]+=$

RewriteRule ^/$ /%1 [R]

只需将所有链接更改为/45678,而不是?p=45678。还是我完全误解了你?因为我从你的帖子中得到的信息是,它工作正常,除非你手动访问?p=45678,因为它保持为?p=45678

编辑:
这就是我所用的,试试看,对我来说就像一个符咒(它还删除了index.php部分)。要访问现在更干净的URL,只需分解
$\u SERVER['PATH\u INFO']
变量,即可获得PHP脚本中所有必需的参数

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

您是否正确设置了mod_rewrite?如果是这样的话,您可以使用像simple
$\u-GET
variables这样的变量,在这种情况下,您必须在PHP中访问
$\u-GET['p']

我这样做时没有使用.htaccess,但它会查询数据库。我不久前写过这篇文章,所以它使用PEARDB,根据您的数据库/连接方法进行调整。我会复制我的代码,让你知道你需要什么样的更改

$db=connect_db();
$name=substr($_SERVER['PHP_SELF'], 20);
$name=strtolower($name);
$id=$db->getone("select id from user where login='{$name}'");
header("Location: /dragonart/profile?user=" . $id);
如果您将信息存储在数据库中,这可能是一个不错的选择。缺点是URL不会被重写,用户最终会被发送到以$\u GET变量结尾的页面

编辑:
刚刚意识到用我的方法可以用一个更简单的方法来回答。由于我的解决方案用于使用用户名查找用户的id,然后将某人发送到他们的个人资料(需要id),因此更好的解决方案如下:

$var=substr($_SERVER['PHP_SELF'], $length);  
header("Location: /path/to/page?p=".$var);

其中,$length是URL的通常长度,末尾没有变量。

Mod_rewrite正是您需要的。请看,您可能编写了错误的重写规则,编辑了您的帖子并包含了您正在使用的代码。感谢您的快速响应,基本上我想使用.htaccess文件获取URL的/45678部分,并将其设置为PHP GET变量,使URL看起来干净感谢您的回复,但它仍然不起作用,我的页面只是告诉我变量是未定义的,所以我可以想象这并没有将/45678作为?p=传递给它,网站的优点是没有返回404错误。将其更改为RewriteRule^(.*)$index.php/?p=$1[L]哦,糟糕,我忘了提到my.htaccess与$\u SERVER['PATH\u INFO']变量一起工作,我的错。按照CaseSoftware的建议去做,你会没事的。