让 RewriteCond 目录标志在没有尾部斜杠的情况下工作

让 RewriteCond 目录标志在没有尾部斜杠的情况下工作

我正在尝试检测现有目录,支持 URL 中带或不带尾部斜杠,但不会对缺失的斜杠进行重定向。规则如下:

  RewriteCond /home/user/public_html%{REQUEST_URI} -d
  RewriteRule ^ /home/user/public_html%{REQUEST_URI} [L]
  RewriteCond /home/user/public_html%{REQUEST_URI}/ -d
  RewriteRule ^ /home/user/public_html%{REQUEST_URI}/ [L]

当 URL 包含尾部斜杠时,第一条规则可以正常工作,但是当 URL 中没有尾部斜杠时,第二条规则则不起作用(例如,/foobar/ 可以起作用,但是 /foobar 不行)。

如何在不进行 30x 重定向的情况下进行设置?

答案1

您可以同时使用这两条规则,如下所示:

# Rewrite sites with trailing slash this way...
RewriteCond %{REQUEST_URI} ^.*\/$
RewriteCond /home/user/public_html%{REQUEST_URI} -d
RewriteRule ^ /home/user/public_html%{REQUEST_URI} [L]

# Rewrite sites without trailing slash this way...
RewriteCond %{REQUEST_URI} ^.*[^\/]$
RewriteCond /home/user/public_html%{REQUEST_URI}/ -d
RewriteRule ^ /home/user/public_html%{REQUEST_URI}/ [L]

这些正则表达式都是我脑子里想出来的,还没有测试过。而且我还没喝咖啡。

相关内容