我有很多这样的重定向:
RewriteRule ^demos/(bar-3d-effect-multi-row\.html) demos-website/$1
RewriteRule ^demos/(bar-adjustable\.html) demos-website/$1
RewriteRule ^demos/(bar-ajax\.html) demos-website/$1
RewriteRule ^demos/(bar-basic\.html) demos-website/$1
RewriteRule ^demos/(bar-dark-background\.html) demos-website/$1
RewriteRule ^demos/(bar-google-power-usage\.html) demos-website/$1
RewriteRule ^demos/(bar-i-love-my-dog-de-bordeaux\.html) demos-website/$1
RewriteRule ^demos.(bar-images-as-labels\.html) demos-website/$1
RewriteRule ^demos/(bar-interactive-key\.html) demos-website/$1
RewriteRule ^demos/(bar-line-switch-effect\.html) demos-website/$1
...
有没有办法将所有这些重定向压缩成几行?或许是这样的:
RewriteCond ^demos-website/%{FILENAME} -f
RewriteRule ^demos/%{FILENAME} /demos-website/%{FILENAME}
如果文件存在于 demos-website 目录中,它只会重写 URL?
请注意正则表达式可能存在问题,因为我自己无法很好地测试它,使用它需要您自担风险:
# sets filename to the file name
RewriteRule ^demos\/.*?([^\/]+)\/*$ - [ENV=filename:$1]
# checks if the file exists in the other directory
RewriteCond %{DOCUMENT_ROOT}/demos-website/%{ENV:filename} -f
# redirect if it is true
RewriteRule ^demos/ /demos-website/%{ENV:filename} [R,L]
您可以参考https://httpd.apache.org/docs/2.4/expr.html#vars了解可以与mod_rewrite一起使用的变量。