如果没有尾部斜杠,htaccess RewriteRule无法正常工作

时间:2016-01-16 03:14:54

标签: php apache .htaccess mod-rewrite redirect

我正在尝试使用主目录的.htaccess文件中的RewriteRule将一个子目录重定向到另一个子目录。

例如:http://website.com/subdir应重写为http://website.com/another_dir/destination_dir,但用户仍应在地址栏中看到http://website.com/subdir

如果用户使用尾部斜杠结束URL,则此方法非常有效。示例:http://website.com/subdir/(生成200

但是,如果省略斜杠,则会生成301重定向,并且我们会看到不需要的目标目录。例如,http://website/subdir会将用户重定向到http://website/another_dir/destination_dir

以下是.htaccess的相关部分:

# URL Rewriting:
RewriteEngine On
RewriteBase /

...

# Redirect subdirectories:
RewriteRule ^subdir(.*)$ another_dir/destination_dir$1 [PT,NC,QSA,L]

感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

您可以在重写规则中调整正则表达式,以选择性地匹配斜杠。

RewriteRule ^subdir(/?.*)$ another_dir/destination_dir$1 [PT,NC,QSA,L]

请注意/?之后的subdir。这表示在您的子目录之后可能存在或不存在斜杠,因此正则表达式将匹配任一方式。

答案 1 :(得分:0)

快速修复

此htaccess中的

DirectorySlash OFF和另一个/ {/ p>中的DirectorySlash ON .htaccess