【发布时间】:2021-11-10 16:39:31
【问题描述】:
如果 URL 类似于:example.com/news/post-1,则下面的 .htaccess Rewrite 下面似乎工作正常:
RewriteRule ^/?news/([^/]+)/?$ article.php?slug=$1 [L,QSA]
但是,如果 URL 包含更多参数,例如:example.com/news/post-1/comment-page-1(来自网站其他版本的 URL)我将收到 500 Internal Server Error。
如何让它重定向到相关帖子而不是 500 Internal Server Error?
【问题讨论】:
-
日志显示什么?是因为
slug值的原因吗?如果您不在乎news/之后的内容,可以将([^/]+)/?交换为(.*)。 -
您的规则与开头的第二种 URL 格式不匹配。
-
没错,CBroe 规则只适用于一个参数,所以如果旧 URL 有多个参数,我如何让它重定向到主帖子?
-
user3783243 日志仅显示“由于可能的配置错误,请求超出了 10 个内部重定向的限制”,(.*) 肯定有帮助,至少不再显示 500。
-
"如果您不在乎
news/之后的内容,可以将([^/]+)/?交换为(.*)" - 尽管这最终会将 错误 值传递给slugURL 参数(然后需要在 PHP 脚本中删除或 404)。您可以将正则表达式的最后一部分更改为([^/]+)(?:$|/)- 以简单地丢弃 URL 的其余部分,但这可能会导致重复内容问题。您最好redirecting 丢弃URL 路径中不需要的部分。 @user3783243
标签: php regex apache .htaccess mod-rewrite