2010-07-05 43 views
0

所以基本上我想让用户能够去我的网站上的类似/45678的网址,而不必使用/?p=45678,所以我真的只想删除变量名。我试过使用mod_rewrite,但它似乎只是用于访问页面时删除名称。如何使用htaccess从URL中删除变量名?

下面是当前的代码:

RewriteEngine On 

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

RewriteRule ^/$ /%1 [R] 
+3

Mod_rewrite正是你所需要的。看到http://stackoverflow.com/questions/3179241/using-htaccess-to-create-clean-url-structure – 2010-07-05 12:02:27

+0

这会引发500错误 – 2010-07-05 12:08:00

+0

然后,你可能写了你的重写规则错误,编辑你的帖子,并包括你正在使用的代码。 – 2010-07-05 12:17:20

回答

0

简单地改变所有链接到/ 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] 
+0

感谢您的快速响应,基本上我想使用.htaccess文件来获取URL的/ 45678部分并使其成为PHP GET变量,以便URL看起来很干净 – 2010-07-05 12:03:52

+0

我更新了主帖, 看一看。 – eklundchristopher 2010-07-05 12:15:20

+0

再次感谢您的回复,但它仍然无法正常工作,我的页面只是告诉我该变量是未定义的,所以我会想象这不会将/ 45678作为?p =传递给它,而正面该网站没有返回404错误。 – 2010-07-05 12:18:23

0

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

0

我没有使用.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); 

其中$长度是通常长度的URL没有变量在最后。