【问题标题】:.htaccess redirect normal url to query string.htaccess 将普通 url 重定向到查询字符串
【发布时间】:2012-08-28 07:42:04
【问题描述】:

我有一个表单的网址:

www.example.com/r/abc/1234

我想重写的:

www.example.com/r.php?deb=abc&id=1234

还有另一个网址:

www.example.com/r/12bcd-qsqs-343-wdwd/1234

应该改写成:

www.example.com/r.php?abc_id=12bcd-qsqs-343-wdwd&id=1234

这两个规则都应该由 .htaccess 处理。有什么建议吗?

【问题讨论】:

  • 将所有内容传递到您自己的脚本中,然后在该 PHP 脚本中将 URI 作为一个参数处理。这对于您正在运行的网络服务器来说更不具体,而且更灵活。这通常只需要一个或很少的规则。比较:symfony2 rewrite rules .htaccess app.php

标签: php .htaccess url url-rewriting rewrite


【解决方案1】:

您要重定向的两个 URI 看起来都相似,除了第二个在第一个查询参数中有连字符 -

通过httpd.conf启用mod_rewrite和.htaccess,然后把这段代码放到你.htaccessDOCUMENT_ROOT目录下:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteRule ^r/([^-]+)/(.+)/?$ r.php?deb=$1&id=$2 [L,QSA]

RewriteRule ^r/([a-z0-9-]+)/(.+)/?$ r.php?abc_id=$1&id=$2 [L,QSA,NC]

【讨论】:

  • 感谢您对我所做的微小更改的帮助,但现在问题是它在我的本地主机上工作,但是当我将它转移到服务器上时,我正在运行虚拟主机它不工作你能帮忙吗?
  • 在服务器上确保 .htaccess 已启用,然后确保 .htaccess 在 DOCUMENT_ROOT 目录中的步调正确。如果一切正常,则在上面的 2 个 RewriteRule 行中添加 R 标志,以查看服务器上的最终 URI 是什么。
  • 非常感谢 :) 有什么方法可以让我在任何社交网站或任何东西上与您保持联系吗?
  • 不客气。这是 LinkedIn 联系人:linkedin.com/in/anubhavasrivastava
【解决方案2】:

试试类似的东西:

RewriteRule (.*)/(.*)/(.*)$ path_to_php_files/$1.php?deb=$2&id=$3 [QSA,L,NC]

不幸的是,使用此规则,您的第一个 $_GET 参数总是 deb,我希望您正确设置了 DirectoryIndex。我不认为

www.example.com/r/abc/1234
www.example.com/r/12bcd-qsqs-343-wdwd/1234

如果您有动态链接,您可以将 abc 和 12bcd-qsqs-343-wdwd 传递给 2 个不同的 $_GET 参数。

【讨论】:

  • 无法工作,因为 RewriteRule 不匹配起始斜线 /
  • 实际上,如果您注意到 OP 想要使用 2 个不同的查询参数以 2 个不同的方式重定向。
猜你喜欢
  • 2012-07-27
  • 2018-10-10
  • 2022-03-24
  • 1970-01-01
  • 1970-01-01
  • 2011-08-13
  • 1970-01-01
  • 2014-05-10
  • 2021-04-05
相关资源
最近更新 更多