【问题标题】:htaccess rewriteRule not displaying new urlhtaccess rewriteRule 不显示新的 url
【发布时间】:2016-07-22 10:48:12
【问题描述】:

我的问题是当我单击链接 (domain.com/?brandID=1&name=Beretta) 时,如何在 RewriteRule 中显示 URL。

我的测试让我相信它可能与 index.php 有关,但也许不是。我的脚本由设置的 GET 变量触发,并查询数据库并包含显示结果的页面(以及“丑陋”的 url)。

这是 .htaccess 代码:

# Rewrite for ?brandID=1&name=Name
RewriteRule ^pistol-brand/([0-9]+)/([0-9a-zA-Z_-]+) ?brandID=$1&name=$2 [NC,L]

我想用 domain.com/pistol-brand/1/beretta 替换 domain.com/?brandID=1&name=Beretta

上面的代码显示了“丑陋”的 url,但是当我将 url 更改为 RewriteRule 状态(domain.com/pistol-brand/1/beretta)时,页面可以正常工作。

如何在点击链接时显示“新”网址?

感谢您的帮助。

【问题讨论】:

  • ?brandID=$1&name=$2 不是有效的 URL,您不能重写。
  • 我也使用失败了:RewriteRule ^pistol-brand/([0-9]+)/([0-9a-zA-Z_-]+) index.php?brandID=$1&name= $2 [NC,L]
  • 我不确定您是否了解 url 重写的工作原理。不要弄错了!只是想在这里防止很多挫败感。如果您单击这样的链接:http :// domain.com/?brandID=1&name=Beretta,上述规则肯定不会做任何事情。您需要有一个这样的链接,然后单击它:http :// domain.com/pistol-brand/1/beretta。那么确实 url 重写应该 internally 重写该请求,以便您的脚本可以处理它。因此无需“更改”浏览器中显示的 url,因为它已经显示了“漂亮”的链接。

标签: php .htaccess mod-rewrite


【解决方案1】:

您还需要一个将丑陋的 url 重定向到 sef 格式

##1)Redirect /?brandID=foo&name=bar to //pistol-brand/foo/bar##
RewriteCond %{THE_REQUEST} /\?brandID=([^&]+)&name=([^\s&]+) [NC]
RewriteRule ^ /pistol-brand/%1/%2? [L,R]
##2)Rewrite  /pistol-brand/foo/bar to /?brandID=foo&name=bar##
    RewriteRule ^pistol-brand/([0-9]+)/([0-9a-zA-Z_-]+) ?brandID=$1&name=$2 [NC,L]

【讨论】:

  • 感谢您抽出宝贵时间提供此解决方案。有用。我希望弄清楚如何以及为什么。谢谢。
猜你喜欢
  • 1970-01-01
  • 2013-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多