是否有一个只包含文件名的变量 - 没有路径

问题描述 投票:0回答:1

我有很多这样的重定向:

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?

apache url-rewriting
1个回答
0
投票

请注意正则表达式可能存在问题,因为我自己无法很好地测试它,使用它需要您自担风险:

# 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一起使用的变量。

© www.soinside.com 2019 - 2024. All rights reserved.