【发布时间】:2025-12-07 00:25:01
【问题描述】:
在 mod_rewrite 规则方面取得了巨大成功,但遇到了障碍。
我希望得到最后的破折号和文件扩展名之间的所有内容。例如。在 domain.com/folder/sub-folder/product-title-that-may-contain-dashes-and-numbers-347.html 的以下示例 URL 中,我希望获取“347”字符。
这是被传递到 item.php 页面的项目 ID。 (目前它只是一个整数,但我希望将其更改为字母数字,例如 347b)
我正在使用以下代码。
RewriteRule ^folder/.*/.*-([0-9]+)\.html$ item.php?item-id=$1 [NC,L]
这适用于大多数 URL,但当最后一个斜杠后面的字符以数字开头时,会产生错误(“此网页有重定向循环”、“错误代码:ERR_TOO_MANY_REDIRECTS”)。如果在最后一个斜杠之后的字符中的其他任何地方有一个数字,那很好,只是不在开头。
有什么想法吗?
PS。请善待。这是我在论坛上的第一篇文章/问题。因此,如果我没有遵循任何适用的规则/礼节/手续/等,这将被视为标准用户的常识,请原谅。 (我通常通过 Google 搜索找到问题的答案,但似乎无法为这个特定示例找到答案。)
【问题讨论】:
-
其实刚刚发现我的错误出在传递变量的文件中。由于我最近更改了 URL 的格式,因此我在 PHP 文件中使用了 PHP 301 重定向来重定向以下格式的文件:domain.com/folder/sub-folder/product-title-that-may-contain-dashes- and-numbers/347 到新格式:domain.com/folder/sub-folder/product-title-that-may-contain-dashes-and-numbers-347.html 我的 PHP 代码中有一个错误。 PS。删除这个帖子有礼貌吗?
-
别担心,这是一个写得很好的第一个问题。如果您认为它可能对其他人有所帮助,请将您的解决方案发布为答案(明天)。但顺便说一句,
RewriteLog通常对于调试此类问题很有用。 -
谢谢。在我使用的 PHP 文件中: $lastNumbers = substr($currentURL, strrpos($currentURL, '/' )+1 );以旧 URL 格式获取最后一个斜杠之后的字符(例如 domain.com/folder-sub-folder/product-name/347 的“347”组件)。但是使用了糟糕的代码,它试图将旧格式的 URL 重定向到新的格式 URL,以用于在最后一个斜杠之后直接以数字开头的任何内容(根据原始 qu)。将其更新为使用基本: if (is_numeric($lastNumbers)) { header("HTTP/1.1 301 Moved Permanently"); header("位置:$redirectURL");出口(); }
标签: php regex apache .htaccess mod-rewrite