【问题标题】:remove everything after comma in url and redirect in htaccess删除 url 中逗号后的所有内容并在 htaccess 中重定向
【发布时间】:2013-09-17 08:49:50
【问题描述】:

我正在尝试向我的 htaccess 文件添加一些重写规则,但我遇到了一些问题。

我目前有以下设置(位来自不同的网站,如果不一致,我很抱歉!):

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /search\.php\?part=([^&]+)\ HTTP/ 
RewriteRule ^search\.php$ http://test.dev/part/%1? [R=301,L] 
RewriteRule ^part/(.+)$ /search.php?part=$1 [L]

这使我可以转到 test.dev/search.php?part=foo 并将 URL 重写/重定向到 test.dev/part/foo -这工作正常,并向我显示正确的内容。

但是,我也可以转到 test.dev/search.php?part=foo,bar 并将网址重写/重定向到 test.dev/part/foo,bar - 即使这显示了正确的内容,这也不是我想要的 url 的样子。

有没有办法考虑 url 中 'part' 之后的内容,如果找到逗号,则删除逗号及其后面的任何内容?

我仍然需要我的代码读取 'foo' 和 'bar' 并显示这两个选项的正确内容,但 url 显示 test.dev/part/foo (因为 foo 是 url 中的第一个)。

【问题讨论】:

    标签: php apache .htaccess redirect mod-rewrite


    【解决方案1】:

    用这个替换你的:

    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\s/+search\.php\?part=([^&,\s]+) [NC]
    RewriteRule ^ /part/%1? [R=301,L] 
    
    RewriteRule ^part/(.+)$ /search.php?part=$1 [L,NC]
    

    更新:将逗号后的字符串捕获到查询字符串中

    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\s/+search\.php\?part=([^&,\s]+)(?:,([^&,\s]+))? [NC]
    RewriteRule ^ /part/%1?q=%2 [R=301,L] 
    
    RewriteRule ^part/(.+)$ /search.php?part=$1 [L,NC,QSA]
    

    【讨论】:

    • 谢谢 - 我可以确认 test.dev/search.php?part=foo,bar 已被重写为 test.dev/part/foo (这就是我想要的)但现在我的代码只寻找“foo”而不是“foo,bar”的“部分”(我的代码在逗号上拆分了“foo,bar”并寻找等于“foo”或“bar”的部分) - 你知道我怎样才能让网站相信它是在寻找“foo”和“bar”,但网址只显示“foo”(就像上面的代码一样) ?
    • 一旦外部重定向在逗号消失后发生字符串。如果您的代码可以使用查询字符串,则可以通过查询字符串提供。
    • 不是听起来很愚蠢,但你能给我一个例子,这样我仍然可以做上面的代码重定向和重写,但也保留查询字符串,这样我就可以在我的代码中使用它?
    • 啊,我明白你的意思了——谢谢。我认为为了让 'foo,bar' 正常工作,我可以在重写的 URL 中使用逗号(这是我的原始代码),或者我没有逗号但最后需要 q= 位(你修改过的例子)?
    • 在这种情况下,我将把这个答案标记为正确,因为我相信它已经回答了我原来的问题 :) 谢谢你的帮助!
    猜你喜欢
    • 2021-05-01
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    相关资源
    最近更新 更多