使用mod_rewrite规则取得了巨大成功,但遇到了障碍。
我想要在最终的破折号和文件扩展名之间获取所有内容。例如。在以下示例域名domain.com/folder/sub-folder/product-title-that-may-contain-dashes-and-numbers-347.html中,我希望获得“347”字符。
这是项目ID,正在传递给item.php页面。 (目前它只是一个整数,但我希望改变它,以便它可以是字母数字,例如.347b)
我正在使用以下代码。
RewriteRule ^folder/.*/.*-([0-9]+)\.html$ item.php?item-id=$1 [NC,L]
这适用于大多数URL,但是当最后一个斜杠后面的字符以数字开头时,它会生成一个错误(“此网页有一个重定向循环”,“错误代码:ERR_TOO_MANY_REDIRECTS”)。如果在最后一个斜线后的字符内的任何其他地方都有一个数字,那就没关系,只是不在开头。
有什么想法吗?
PS。请善待。这是我在论坛上发表的第一篇文章/问题。如果我没有遵守任何适用于标准用户的常识的适用规则/礼仪/手续/等,请原谅。 (我通常通过谷歌搜索找到问题的答案,但似乎找不到这个具体例子。)
答案 0 :(得分:0)
仅供参考,请回答以下完整的问题(和实际问题),以防其他人帮助。
引用的mod_rewrite代码实际上是正确的。发现错误存在于传递变量的文件中。
由于我最近更改了URL的格式,我在PHP文件中使用PHP 301重定向来重定向文件格式:
domain.com/folder/sub-folder/product-title-that-may-contain-dashes-and-numbers/3 47
采用新格式:
domain.com/folder/sub-folder/product-title-that-may-contain-dashes-and-numbers-3 47.html
PHP代码中存在错误。
在我使用的PHP文件中:
$lastNumbers = substr($currentURL, strrpos($currentURL, '/' )+1 );
以旧URL格式获取最终斜杠后的字符(例如domain.com/folder-sub-folder/product-name/347的“347”组件)。
但是使用了糟糕的代码,它试图将旧格式的URL重定向到新格式的URL,以便在最终斜杠之后直接以数字开头(根据原始问题)。
更新它以使用基本:
if (is_numeric($lastNumbers)) {
header("HTTP/1.1 301 Moved Permanently");
header("Location: $redirectURL");
exit();
}