繁体   English   中英

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

[英]How do I remove a variable name from a URL using htaccess?

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

这是当前代码:

RewriteEngine On 

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

RewriteRule ^/$ /%1 [R]

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

编辑:
这就是我在http://www.madphp.org/dev/上使用的功能,它对我来说就像是一种魅力(它也删除了index.php部分)。 要访问您现在更简洁的URL,您只需将$_SERVER['PATH_INFO']变量展开即可在PHP脚本中获取所有必需的参数。

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

您是否已正确设置mod_rewrite? 如果是这样,则可以使用简单的$_GET变量之类的变量,在这种情况下,必须在PHP中访问$_GET['p']

我没有使用.htaccess来执行此操作,但是它确实查询了数据库。 我之前写过这篇文章,所以它使用PEAR DB,调整为您的数据库/连接方法。 我只复制我的代码,然后让您确定所需的更改。

$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不会被重写,并且最终会将用户发送到以$ _GET变量结尾的页面。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM