gpt4 book ai didi

apache - htaccess - 当请求的 URL 是我系统上的文件夹时,重写规则不起作用

转载 作者:行者123 更新时间:2023-12-01 06:04:52 24 4
gpt4 key购买 nike

对我网站的所有请求都应重写为 index.php?page=blah ,其中 blah 是请求的页面(css、js、jp(e)g、gif 和 png 文件除外)。

这是我的 .htaccess 文件的样子:

RewriteEngine On
RewriteCond %{REQUEST_URI} !\.(?:css|js|jpe?g|gif|png)$ [NC]
RewriteRule ^(.*)$ index.php?page=$1 [L,QSA]

.htaccess 位于此目录中: localhost:8080/example/ ,所以当我去 localhost:8080/example/abc ,它被(内部)重写为 localhost:8080/example/index.php?page=abc .

但是当我去 localhost:8080/example/res , 我被重定向到 localhost:8080/example/res/?page=res .我发现这只发生在目录中;当我去 localhost:8080/example/core (也是我文件系统上的一个文件夹),我被重定向到 localhost:8080/example/core/?page=core而它应该在内部重写为 localhost:8080/example/index.php?page=core并且用户可见的 url 应该保留 localhost:8080/example/core/
编辑:

感谢@w3dk,他解决了上述问题。但是我发现了另一个问题,可能和上面的问题有关:

当我去: localhost:8080/example/index/a ,内部改写为 localhost:8080/example/index.php?page=index.php/a , 而它应该被重写为 localhost:8080/example/index.php?page=index/a .

我发现这种情况发生在 index 时是一个文件,因为当我去 localhost:8080/example/exampleFile/abc 时,它被重定向到 localhost:8080/example/index.php?page=exampleFile.php/abc ,这不应该是这种情况。

我的目录中的 2 个文件是:
  • index.php(一切都应该指向这个文件)
  • 例子.php

  • Apache 似乎忽略了 php 文件扩展名,因为这也适用于 exampleFile.txt

    最佳答案

    这可能是由于与 mod_dir 冲突而发生的。默认行为( DirectorySlash On )是 mod_dir 在您请求不带斜杠的物理目录时自动“修复”URL。在处理您的规则之前,它通过外部 301 重定向来完成此操作。然后触发您的规则,修改目标 URL Location header 返回给客户端,浏览器重定向。

    如果您在原始请求中包含尾部斜杠,则不会发生这种情况。例如。 localhost:8080/example/core/ . mod_dir 然后不需要“修复” URL 并发出重定向。虽然这对您来说可能并不理想?

    由于您想在内部重写所有目录,因此简单的解决方法是在 .htaccess 中禁用此行为。 :

    DirectorySlash Off

    您需要在测试前清除浏览器缓存,因为 mod_dir 的早期 301 将已在本地缓存。

    引用(注意安全警告):
    https://httpd.apache.org/docs/current/mod/mod_dir.html#directoryslash

    关于apache - htaccess - 当请求的 URL 是我系统上的文件夹时,重写规则不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41378836/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com