【问题标题】:Mod_rewrite: grab second URL string in regular expressionmod_rewrite:在正则表达式中抓取第二个 URL 字符串
【发布时间】:2012-12-06 07:08:21
【问题描述】:

我正在处理的网站使用如下规则更改 URL:

RewriteRule ^(.*)/(.*)/$ string.php?id=$1&slug=$2 [L,NC]

从而产生 id/slug。我想删除 ID 部分,但不知道如何只选择 slug。正在做:

(.*)/$ string.php?id=$1&slug=$2 [L,NC]

从 ID 而不是 slug 创建一个 URL...

这可能是一个简单的答案,但我找不到它...谢谢!

【问题讨论】:

  • 等等,所以你想完全删除 id 并且只依赖像 example.com/slug 这样的 slug?或者您不希望最终查询字符串中的 id 像 example.com/id/slug >> string.php?slug=slug ??
  • 您的最终到达网址应该是什么样的,应该指向什么?
  • 对不起,我想要 example.com/slug。谢谢!
  • 我刚刚在下面的代码中发现了一个错字。已编辑...

标签: regex apache url mod-rewrite


【解决方案1】:

要仅匹配 slug,您希望将 slug 捕获到 $1。您的尝试捕获了$1,但将其传递给了id=

# [^/]+ matches everything up to but not including /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)$ string.php?slug=$1 [L,NC]

【讨论】:

  • 我写了RewriteRule ^([^/])+$ contactus.php?id=$1&slug=$2 [L,NC],但它使网站崩溃了...... Firefox 说该网站正在以一种永远无法完成的方式使用重定向。
  • 我有点盲目地尝试在 $ - RewriteRule ^([^/])+/$ contactus.php?id=$1&slug=$2 [L,NC] 之前添加一个斜杠,它阻止了崩溃,但不能作为重定向。
  • # [^/]+ matches everything up to but not including / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/])+$ contactus.php?slug=$1 [L,NC] 没有崩溃,但新的 URL 不起作用。我也尝试将 id 字符串添加到查询中:# [^/]+ matches everything up to but not including / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/])+$ contactus.php?id=$1&slug=$2 [L,NC],结果相同。感谢您到目前为止为我提供的帮助:)
  • @JuanPonderas 如果您的脚本需要 id 的存在,您必须在 URL 中传递它。如果没有,请忽略它。要调试,请添加 [L,NC,R=301] 以查看它实际重定向到的位置,因为它将重定向浏览器而不是内部重写
  • 修正了错字,但重定向仍然不起作用:/网站的脚本需要 id-我只是希望它不在发送给用户的 URL 中。更多我的代码,如果有帮助:Options +FollowSymlinks RewriteEngine on # Force WWW RewriteCond %{HTTP_HOST} !^www\.website\.com RewriteRule (.*) http://www.website.com/$1 [R=301,L] ... RewriteRule ^contact/$ contact.php [L,NC] ... # [^/]+ matches everything up to but not including / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/]+)$ contactus.php?id=$1&slug=$2 [L,NC]
【解决方案2】:

我认为您的问题是您使用的是 slug=$2,但您更新的 RewriteRule 没有第二个捕获组。

RewriteRule ^(.*)/$ string.php?slug=$1 [L,NC]

如果你的 URL 是 http://www.example.com/slug,这将产生 http://www.example.com/string.php?slug=slug

【讨论】:

  • 不起作用:/我很好奇它是如何工作的。在我看来,新的 URL 将有两个部分,替换路径会转到不存在的地方,尽管我对此的理解不是太全面......
  • 我已经更新了我的答案,我对你想要匹配的内容以及你想要制作的内容感到困惑。
猜你喜欢
  • 1970-01-01
  • 2021-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-29
  • 2011-03-29
  • 2013-08-21
  • 1970-01-01
相关资源
最近更新 更多