【问题标题】:Htaccess second rewrite rule not working on ProductionHtaccess 第二个重写规则不适用于生产
【发布时间】:2020-12-02 10:35:20
【问题描述】:

最奇怪的事情。两个重写规则都在我们的测试服务器上运行,但第二个locations 不适用于生产,并且出于某种原因在locations/ 的末尾添加了一个/。两台服务器上的配置相同。

我正在尝试在不重命名文件的情况下简化 URL。这样如果用户输入site.php/locations,它将加载重定向页面的内容,但保留简化的 URL

关于为什么locations 重定向不起作用的任何想法?

RewriteEngine on
RewriteBase /

// The next two are statements are just for context. They preceded the faq and locations forward 
RewriteCond %{REQUEST_URI} ^/index.php$
RewriteRule (.*) / [R=301,L]

// The two rewrites that I want
RewriteRule ^faq$ /faq-mailbox-account.php [NC,L]
RewriteRule ^locations$ /choose-digital-mailbox-location.php [NC,L]

【问题讨论】:

  • 这里缺少一些东西...site.php/locations显然永远不会与^locations$ 匹配。但同样适用于“常见问题”规则。因此,请花时间修改您的问题。解释你的真实设置。
  • 忘记包含 RewriteBase。所以重写应该匹配后面的文本:site.php/
  • 不会改变任何事情。模式无法匹配。
  • 请确保您没有查看早期尝试的缓存结果。在两种环境中。
  • 我修改了我的问题。我会要求我的经理明天检查缓存,因为他处理服务器的东西。另请注意,它仅被推送到 Prod 一次。并在测试服务器上运行了几次。并且 faq 重定向在所有实例上都可以正常工作,只是 locations 有问题

标签: php apache .htaccess mod-rewrite url-rewriting


【解决方案1】:

... 在生产上,并出于某种原因在 locations/ 的末尾添加了一个 /

如果locations 作为文件系统上的物理目录存在,就会发生这种情况。 (或者存在并且响应被缓存了。)

如果您请求 /locations/locations 作为物理目录存在,则 mod_dir 将发出 301 外部重定向以附加尾部斜杠 - 通常,这是“修复” URL 所必需的。

无论您的规则是否匹配,mod_dir 的这种外部“重定向”都会发生*1,因为它“只是”一个内部重写 而不是另一个重定向。 (*1 事实上,它确实匹配并且确实发生了重写,但是它被 mod_dir 重定向有效地覆盖了。)

您可以在RewriteRule pattern 上附加一个 可选 斜杠,例如。 ^locations/?$ - 但如果您请求 /locations 没有尾部斜杠,重定向仍将首先发生。您需要请求一个已经包含斜杠的 URL。

您可以使用 DirectorySlash Off 阻止 mod_dir 附加斜杠,但是,这可能会对您的系统产生其他影响。

还要注意,由于这是一个 301(永久)重定向,它可能会被您的浏览器永久缓存。因此,如果 /locations 目录在服务器上已经被删除,浏览器仍然会重定向用户,直到所有客户端缓存也被清除。

两台服务器上的配置相同。

那么,两台服务器上都有(或曾经/locations 目录?

如果两台服务器上的配置相同,那么您将得到相同的响应,因此肯定存在一些差异。或者,存在客户端缓存问题。

这样如果用户输入site.php/locations

我假设您的意思是 site.com/locations - 否则,您发布的指令没有希望工作,因为它们根本不匹配。

【讨论】:

  • 抱歉耽搁了,但问题是因为符号链接驱动器
【解决方案2】:

问题是由于 Prod 上的符号链接驱动器

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 2010-12-10
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    相关资源
    最近更新 更多