我正在尝试删除查询字符串:?id=来自此URL:
https://example.com/news-and-events/news/?id=/nodle/nodle-io/ledger-integration-update-compatibility-status-236699676dc6
并保持页面加载/工作正常
我试过这个:
重写引擎打开
重写条件%{查询字符串} ^(.)?ID=(.)?$ [NC]
重写规则^(.*)?$$1%2?[R=301,L]
它似乎剥离了?id=出罚款,但页面不会加载,只是404 s.
我的问题是使内容加载/结转到新的URL。
https://example.com/news-and-events/news/nodle/nodle-io/ledger-integration-update-compatibility-status-236699676dc6
感谢任何帮助,谢谢Rob
期望URL加载良好,而不是404,但与较短的URL。
1条答案
按热度按时间2sbarzqh1#
更新答案:
缺少
/
是因为您可能还没有声明RewriteBase
。由于您正在使用整个REQUEST_URI
,下面代码中的这个应该可以完成。另外,
RewriteCond
的第二括号表达式需要*
来提供完整的QUERY_STRING
(减少了搜索模式id=/
)。文件:
/news-and-events/news/.htaccess
:简化版
文件:
/news-and-events/news/.htaccess
:或在
virtualhost.conf
文件中:在此,背景至关重要:
顺便说一句:用双引号将模式括起来是一个好习惯,即使并不总是必要的。
一些评论
您与
QUERY_STRING
进行匹配:在URL中,它总是以
?
后面的字符 * 开始,因此RewriteCond
中的匹配不由于正则表达式是贪婪的,并且您选择了整个字符串,因此强制字符串的
^
开始和$
结束是过时的。另外,通过?
使其可选也是不必要的,因为(.*)
本身可能计算为空。说明
virtualhost.conf
文件中。.htaccess
的指令,但希望在virtualhost.conf
-文件中写入规则。.htaccess
文件来解决你的问题。-真的很重要!*但很明显你的意图和你的问题正好相反:
404 · Not found
.* HTML客户端错误。这样做有它的意义,当涉及到一个变化的URI结构(即由于服务软件的变化),你希望你的访问者能够跟随内容。同样通过HTML状态码
301 · Moved permanently
搜索引擎将很快学会使用新的URI逻辑,并保持搜索引擎优化。