【问题标题】:How do I remove a variable name from a URL using htaccess?如何使用 htaccess 从 URL 中删除变量名?
【发布时间】:2010-07-05 11:57:03
【问题描述】:

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

这是当前代码:

RewriteEngine On 

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

RewriteRule ^/$ /%1 [R]

【问题讨论】:

标签: php url .htaccess mod-rewrite


【解决方案1】:

只需将所有链接更改为 /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]

【讨论】:

  • 感谢您的快速响应,基本上我想使用 .htaccess 文件来获取 URL 的 /45678 部分并使其成为 PHP GET 变量,以便 URL 看起来干净
  • 再次感谢您的回复,但它仍然无法正常工作,我的页面只是告诉我变量未定义,所以我想这不是将 /45678 传递给它吗? p=,而且网站没有返回 404 错误。
  • 改成 RewriteRule ^(.*)$ index.php/?p=$1 [L]
  • 哦,废话,我忘了提到我的 .htaccess 与 $_SERVER['PATH_INFO'] 变量一起工作,我的错。按照 CaseySoftware 的建议去做,你应该没问题。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    我没有使用 .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 的通常长度,末尾没有变量。

    【讨论】:

      猜你喜欢
      • 2011-03-23
      • 2012-08-01
      • 1970-01-01
      • 2021-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-29
      • 1970-01-01
      相关资源
      最近更新 更多