Htaccess 第二个重写规则不适用于生产

最奇怪的事情。两个重写规则都在我们的测试服务器上运行,但第二个规则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]


慕的地8271018
浏览 83回答 2
2回答

qq_花开花谢_0

...在生产中并由于某种原因/在末尾添加了一个locations/locations如果作为文件系统上的物理目录存在,就会发生这种情况。(或者存在并且响应被缓存。)如果您请求/locations并/locations作为物理目录存在,则 mod_dir 将发出 301 外部重定向以附加尾部斜杠 - 通常,这是“修复”URL 所必需的。无论您的规则是否匹配*1 , mod_dir 都会发生这种外部“重定向” ,因为它“只是”内部重写而不是另一个重定向。(*1事实上,它确实匹配并且重写确实发生,但它被 mod_dir 重定向有效地覆盖。)您可以在您的模式中附加一个可选的斜杠,例如。- 但如果您请求的末尾没有斜杠,重定向仍然会首先发生。您需要请求一个已包含尾部斜杠的 URL。RewriteRule ^locations/?$/locations您可以使用 来阻止 mod_dir 附加尾部斜杠DirectorySlash Off,但是,这可能会对您的系统产生其他影响。另请注意,由于这是 301(永久)重定向,因此您的浏览器可能会永久缓存它。因此,如果该/locations目录已在服务器上删除,浏览器仍将重定向用户,直到所有客户端缓存也被清除。两台服务器上的配置相同。那么,两台服务器上都有(或曾经)有一个目录吗?/locations如果两台服务器上的配置相同,那么您将得到相同的响应,因此一定存在一些差异。或者,存在客户端缓存问题。这样如果用户输入site.php/locations我认为您的意思是site.com/locations- 否则,您发布的指令没有希望起作用,因为它们根本不匹配。

德玛西亚99

该问题是由于 Prod 上的符号链接驱动器造成的
打开App,查看更多内容
随时随地看视频慕课网APP