【问题标题】:RewriteRule to redirect with url that got parametersRewriteRule 使用获取参数的 url 进行重定向
【发布时间】:2011-06-24 12:38:08
【问题描述】:

我正在尝试使用 RewriteRule 将表单 x 页面重定向到 y 页面。 x 页面有两个参数 > products.php?product=$1&page=$2 (myweb.com/products.php?prod...) y 应该是 $1/$2/ (myweb.com/$1/$2/)

我试过这个>

Options +FollowSymlinks
RewriteEngine on
RewriteBase /
RewriteRule ^products.php?product=(.*) $1/ [R=301,L]

仅用于测试,以及一些类似的代码,例如 > /$1/ 而不是 $1/,仅 $1 我尝试将 RewriteCond 与 query_string 一起使用,但没有任何效果....

ofc 继续到 htaccess >

RewriteRule ^(.*)/$ $1.php [L]

还有一些不相关的规则(我认为)

你能帮帮我吗?

谢谢。

编辑:

经过大量搜索,我找到了答案! 这就是答案:

RewriteCond %{QUERY_STRING} ^product=(.*)$
RewriteRule ^test.php$ %1/? [R=301,L]

现在解释一下: 首先,添加了匹配查询字符串的重写条件。 其次,我从重写规则和 $ = continue (查询字符串)中删除查询字符串。我还需要添加? (问号)在rewriterule的第二部分>%1/?问号表示我不想在新的url中保留查询字符串。

【问题讨论】:

  • 'RewriteRule` 与 PHP 无关。你可能想删除那个“php”标签。
  • 已移除,虽然我认为它与 php 有关,因为 95% 的使用 php 的人也使用 htacces (rewriterules)。

标签: .htaccess mod-rewrite redirect


【解决方案1】:

您的规则的第一部分应包含一个正则表达式,服务器可以与该表达式比较请求。例如:

RewriteRule ^([^/]+)/?  index.php?page=$1 [L]

这需要http://somedomain.fake/somepage/ 并将其重定向到http://somedomain.fake/index.php?page=somepage。规则的第一部分匹配,第二部分处理。我在那里的规则“([^/]+)”是匹配任何东西的正则表达式。如果您想缩小规则的工作方式,可以自定义正则表达式以包含或排除某些字符串部分。

我建议您考虑在规则上方添加以下条件。它们确保如果与规则匹配的文件或目录确实存在,则服务器不会通过重写覆盖实际文件。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d 

.htaccess 和 mod_rewrite 是巫术,使用旧引号。在实际网站上实施此类事情之前,请务必进行彻底的研究。

--------------------- 编辑:

讨论后更新:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^product=([^/]+)$
RewriteRule ^products\.php$ %1.php [L]

RewriteEngine On
RewriteCond %{QUERY_STRING} ^product=([^/]+)$
RewriteRule ^products\.php$ %1/ [L]

【讨论】:

  • 我不想重定向到 php 页面。我想重定向具有自己重写规则的页面(例如,我得到了以下规则 ^(.*)/$ $1.php [L]。所以如果我去 ^products.php?product=$1 它会将我重定向到$1/ 有他的规则...
  • 然后,正如我所提到的,您想要制作您的正则表达式:RewriteRule ^products.php?product=([^/]+)? 1 美元/[L]。规则的第一部分始终是某种正则表达式或字符串(无变量),第二部分是使用第一部分中使用的正则表达式收集的变量的地方。
  • 试过这个> RewriteRule ^products.php?product=([^/]+)? www.youtube.com [R=301,L] 并转到 myweb.com/products.php?product=test 并没有将我重定向到 youtube。还是不行……
  • 嘎。看,巫毒。请看答案,我已经添加了一个更新(并确认)的规则。
  • 我的网站已经上线,所以我不能设置相同的规则。这是我在 htaccess RewriteCond %{QUERY_STRING} ^product=([^/]+)$ RewriteRule ^test\.php$ %1.php [R=301,L] 中添加/更改的内容到 myweb.com /test.php?product=something 并将我重定向到 myweb.com/something.php?product=somehthing 这是错误的......应该将我重定向到 myweb.com/something/
猜你喜欢
  • 2011-01-09
  • 2012-07-21
  • 2020-08-24
  • 2015-04-27
  • 2012-10-27
  • 1970-01-01
  • 1970-01-01
  • 2019-10-30
  • 1970-01-01
相关资源
最近更新 更多