我想redirecthttp://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>
这条规则有什么问题,这是否包含重写的正确位置?
谢谢
重写path在<Directory >上下文中以不同的方式工作。 您匹配的path是删除当前目录(包括结尾的斜杠)的完整文件系统path。
这样做的效果是,您需要从正则expression式和replace字段中删除前导斜杠,或者将重写规则移到目录上下文之外,在那里它将匹配URI而不是文件系统path。
请注意, .htaccess文件隐含在目录上下文中,因为它位于目录中。
你也不应该有一个插入在更换。 第二个参数不是一个正则expression式。
你在你的问题中提到了一个redirect 。 为了做到这一点,在第二个参数之后需要[R]或者一个更具体的代码( [R=301]或者[R=303] )。
试试这个:
RewriteRule ^/abc/lmn$ /abc/lmn.html [NC,L]
按照https://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriterule,RewriteRule的参数是一个模式,一个replace和一些标志。 ^字符将被视为replace部分中的文字,这可能不是您想要的。
mod_rewrite具有出色的日志logging,这对debugging这类问题很有帮助。 使用LogLevel alert rewrite:trace3启用它,然后调整trace8以上的级别,以获得所需的详细级别。 有关日志logging的更多细节:
https://httpd.apache.org/docs/current/mod/mod_rewrite.html#logging
尝试以下操作:
<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>