这个 apache URL 重写规则有什么问题?

这个 apache URL 重写规则有什么问题?

我想重定向http://abc.xyz.ac.uk/folders/abc/lmn http://abc.xyz.ac.uk/folders/abc/lmn.html

下面是我启用此功能的代码

 <Directory /var/www/folders>
            RewriteEngine on
            RewriteRule ^/abc/lmn$ ^/abc/lmn.html [NC,L]
            Options Indexes FollowSymLinks MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
    </Directory>

这条规则有什么问题?这里是包含重写的正确位置吗?

谢谢

答案1

重写路径在<Directory >上下文中的工作方式不同。您匹配的路径是删除了当前目录(包括尾部斜杠)的完整文件系统路径。

这样做的效果是,您需要从正则表达式和替换中删除前导斜杠,或者将重写规则移到目录上下文之外,在那里它将匹配 URI 而不是文件系统路径。

请注意,由于.htaccess文件位于目录中,因此它隐式地位于目录上下文中。

您也不应该在替换中使用插入符号。第二个参数不是正则表达式。

你提到了重定向在您的问题中。要实现这一点,您需要在第二个参数后使用[R]或 其中一个更具体的代码([R=301]或)。[R=303]

答案2

尝试一下这个:

RewriteRule ^/abc/lmn$ /abc/lmn.html [NC,L]

按照https://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriterule,的参数RewriteRule是模式、替换和一些标志。字符^将在替换部分被视为文字,这可能不是您想要的。

mod_rewrite具有出色的日志记录功能,这对于调试此类问题很有帮助。使用 启用它LogLevel alert rewrite:trace3,并将级别调整到任意位置以trace8获得所需的详细程度。有关日志记录的更多详细信息,请参见此处:

https://httpd.apache.org/docs/current/mod/mod_rewrite.html#logging

答案3

请尝试以下操作:

<Directory /var/www/folders>
        RewriteEngine on
        RewriteBase /folders
        RewriteRule ^/abc/lmn$ /abc/lmn.html [NC,L]
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
</Directory>

相关内容