【问题标题】:.htaccess: remove random number and hyphen from a url.htaccess:从 url 中删除随机数和连字符
【发布时间】:2020-03-13 21:02:57
【问题描述】:

我想从 URL 中删除带有连字符的随机数并使用 .htaccess 文件重定向到其余 URL

例如, 我有一个以下网址,我想从中删除“16-”

https://example.com/pics/16-Apple_8xx.jpg

预期的 URL 和重定向到:

https://example.com/pics/Apple_8xx.jpg

请帮助我摆脱这个问题。 抱歉,之前没有 .htaccess 文件方面的经验。

提前致谢!

【问题讨论】:

    标签: .htaccess url redirect


    【解决方案1】:

    听起来很简单:

    RewriteEngine on
    RewriteRule ^/?pics/[\d]+-(.+)$ /pics/$1 [R=301]
    

    最好先从 302 临时重定向开始,稍后再将其更改为 301 永久重定向,前提是您确定一切都已正确设置。这样可以防止在尝试时出现缓存问题...

    此实现同样适用于 http 服务器主机配置或分布式配置文件(“.htaccess”文件)。显然重写模块需要在http服务器内部加载并在http主机中启用。如果您使用分布式配置文件,您需要注意它的解释在主机配置中完全启用,并且它位于主机的 DOCUMENT_ROOT 文件夹中。

    一般来说:您应该始终喜欢将此类规则放在 http 服务器主机配置中,而不是使用分布式配置文件(“.htaccess”)。这些分布式配置文件增加了复杂性,通常是意外行为的原因,难以调试并且它们确实减慢了 http 服务器的速度。它们仅在您无法访问真正的 http 服务器主机配置(阅读:非常便宜的服务提供商)或坚持编写自己的规则的应用程序(这是一个明显的安全噩梦)的情况下作为最后一个选项提供。

    更新:

    在您对这个问题的评论中,您现在写了比您在问题中写的另一条路径。在评论中,我解释了该规则将不会被应用的内容。所以要么你需要让模式和目标匹配实际的需求:

    RewriteEngine on
    RewriteRule ^/?redirect/pics/[\d]+-(.+)$ /redirect/pics/$1 [R=301]
    

    或者您可以尝试实施更灵活的规则。然而,这通常是导致您在很久以后才发现的令人惊讶的副作用的原因。所以这是有问题的:

    RewriteEngine on
    RewriteCond %{REQUEST_URI} /pics/[\d]+-(.+)$
    RewriteRule ^/?(.*pics)/[\d]+-(.+)$ /$1/%1 [R=301]
    

    【讨论】:

    • 感谢您的回答。不幸的是,当我在本地主机上测试时,它不起作用。我点击 URL localhost/redirect/pics/65-1.jpg 并且 pics 文件夹包含 localhost/redirect/pics/1.jpg image 1.jpg。
    • 它给了我找不到对象!
    • 当然,/redirect/pics/65-1.jpg/pics/65-1.jpg 不同...在您的问题中,您写的路径是/pics/.....,现在您突然在该路径之前多了一个/redirect/...。这就是模式不匹配的原因。您将需要将额外的路径部分添加到模式和目标中,或者冒着匹配不太精确的风险,这可能会在以后导致副作用。
    • 你能帮我解决这两种情况吗?
    • 不幸的是,更新答案不起作用;(localhost/redirect/pics/16-1.jpg我点击了这个网址,其中 16 可以是带有连字符的任何随机数 - 重定向应该在删除后位于以下链接随机数和连字符 localhost/redirect/pics/1.jpg @arkascha 请帮助我在本地主机和实时 URL 中解决此问题再次感谢!
    【解决方案2】:

    在研究和了解 .htaccess 配置后 我在全球范围内得到了 localhost 和 live 域的答案。

    现在,我的 .htaccess 文件只包含以下代码行。

    RewriteEngine on
    RedirectMatch 301 [\d]+-(.+)$ http://localhost/redirect/pics/$1
    

    对于实时域:

    RewriteEngine on
    RedirectMatch 301 [\d]+-(.+)$ http://example.com/pics/$1
    

    非常感谢@arkascha 抽出宝贵时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-30
      • 1970-01-01
      • 2021-06-25
      • 1970-01-01
      • 2014-04-08
      • 2012-11-28
      • 1970-01-01
      相关资源
      最近更新 更多