我正在尝试检测现有目录,支持 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]
这些正则表达式都是我脑子里想出来的,还没有测试过。而且我还没喝咖啡。