重写规则在 .htaccess 文件中不起作用 Ubuntu 22.04

重写规则在 .htaccess 文件中不起作用 Ubuntu 22.04

我为在自己的服务器 Apache Ubuntu 22.04 上运行的网站创建了一个 .htaccess 文件,除了重写规则外,其他一切都运行正常。我肯定已经打开了 mod_rewrite,因为当我使用 phpinfo(); 创建 php 文件时,它出现在已加载的模块中。我还进入了 apache.conf 和 sites-enabled conf 文件,并将 AllowOverride 设置为 All。

重定向规则运行正常,没有任何问题,但是每当我尝试使用重写规则时,它似乎总是不起作用。

该代码有效:

Redirect /foobar/ https://example.com

但是此代码没有:

RewriteEngine on
RewriteRule ^foobar/$ https://example.com/ [R]

这是我在 apache2.conf 文件中所做的更改

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
        Order allow,deny
        allow from all
</Directory>

有人知道这是为什么吗,因为我试过的所有方法都不起作用,任何帮助都将不胜感激。

答案1

您的规则可能缺失,并且旁边?缺少标志可能会导致问题。通常,当从一个目录重定向到另一个目录时,您会执行以下操作:LR

RewriteEngine On
RewriteRule ^foobar/?$ https://example.com/ [R,L]

但是,如果你重定向到同一个域名,那么通常最好(但不是必须)排除域名。您可以这样做:

RewriteEngine On
RewriteRule ^foobar/?$ / [R,L]

如果你想拥有 Uri 字符串 foobar/与主域一起使用,这在您将 Url 方案从类似的更改为时很有用/wordpress/2022/10/05/hello-world/2022/10/05/hello-world然后您可以像这样保留字符串:

RewriteEngine On
RewriteRule ^foobar/(.*)$ /$1 [R=301,NC,L]

在重写规则中使用 时要小心[R]。如果不包含 HTTP 代码,Apache 将默认使用302,这是一个临时重定向。如果 URL 结构将永久更改(或更改时间超过一年),最好指定永久重定向,即301


关于 RewriteRule 标志的说明:

旗帜 意义
R 执行重定向
NC 不需注意Url的大小写
L 停止处理其他规则

L如果定义中没有RewriteRule但之后有更多规则,那么 Apache 可能会继续运行。

相关内容