我想重定向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>