【问题标题】:Redirecting through .htaccess using a wildcard使用通配符通过 .htaccess 重定向
【发布时间】:2013-03-12 20:26:56
【问题描述】:

如何在 .htaccess 文件中进行通配符重定向?

我尝试使用以下方法,但 * 由于某种原因不起作用。

redirect 301 /threads/*.343/ http://myotherdomain.com/threads/*.343/

我不能使用 mod_rewrite,因为我需要执行 7000 次这样的重定向,显然,当我尝试其中大约一半时,我的服务器抛出了 500 错误配置错误。

因此,编写 7000 行上述代码似乎不那么密集了。

无论如何,请告诉我如何在这种代码中表达通配符。

【问题讨论】:

    标签: apache .htaccess mod-rewrite redirect rewrite


    【解决方案1】:

    您不需要 7000 条单独的重写规则,只需使用 RewriteMap

    1 - 首先在 2 列中创建一个包含所有 7000 个选定 ID 的文本文件,如下所示:

    343 343
    349 349
    518 518
    

    2 - 然后在httpd.cond 中定义一个 RewriteMap,如下所示:

    RewriteMap idmap txt:/path/to/file/map.txt
    

    3 - 然后通过httpd.conf 启用 mod_rewrite 和 .htaccess,然后将此代码放在您的 .htaccess 下的 DOCUMENT_ROOT 目录下:

    Options +FollowSymLinks -MultiViews
    # Turn mod_rewrite on
    RewriteEngine On
    RewriteBase /
    
    RewriteRule ^threads/(.*)$ http://myotherdomain.com/threads/${idmap:$1} [L,NC,R=301]
    

    【讨论】:

    • 我有 7000 个不同的 ID,即 url 代码末尾的数字。因此我需要写 7000 行。如果我在 mod_rewrite 中表达它,如下所示。 RewriteRule ^threads/[^\.]+\.(343|225|435|677|787|89|764|865|934)/(.*)$ http://www.example2.com/threads/$1/$2 [R=301,L] ^ 这段代码的问题是即使有 3500 个 ID,更不用说 7000 会导致我的网站引发服务器配置错误错误 (500)
    • 那么在这种情况下:RewriteRule ^(threads/[^.]+\.[0-9]+)/?$ http://myotherdomain.com/$1 [L,NC,R=301] 对你来说会更好。
    • 有特定的 7000 个 ID。我不希望所有 URL 都被重定向,只希望那些在 7000 个 ID 内的 URL。
    【解决方案2】:

    使用 mod_alias,您可以改用 RedirectMatch

    RedirectMatch permanent ^/threads/[^/]+\.343/$ http://myotherdomain.com$0
    

    这匹配所有匹配 /threads/*.343/ 的 URL,* 是除 / 之外的任何字符。

    【讨论】:

    • 我假设“永久”负责整个 301 重定向?
    • 我遇到了一个小问题。我认为它与 ID 不完全匹配。这个数字343,如果重定向状态为343,它似乎接受3433。反正要说最后的数字一定要准确?
    • 转义 . 将解决它,请参阅修订后的答案。是的,permanent301 相同(您可以使用其中任何一个)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-20
    • 2015-11-04
    • 2018-10-03
    • 1970-01-01
    • 2016-09-07
    相关资源
    最近更新 更多