我正在尝试使用与RewriteRule
相同的 .htaccess 中的Alias /var/www/html/core/ Alias /var/www/html/core/latest/
。
我在 / var / www / html / core 中创建了 .htaccess :
RewriteEngine On
#Check if file exist in original path (/var/www/html/core):
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
#try new path (/var/www/html/core/latest):
RewriteRule ^(.*)$ latest/$1 [NC,L]
这是有效的。但如果 / var / www / html / core / latest 中存在文件,则表示内部服务器错误而不是正常的404错误。所以我必须在最后RewriteCond *** -f
之前使用一些RewriteRule
,以确保文件存在于新路径中。
问题是我无法将%{REQUEST_FILENAME}
更改为latest/%{REQUEST_FILENAME}
。例如:
是否有可能以某种方式解析.htaccess中的%{REQUEST_FILENAME}
?
答案 0 :(得分:3)
您可以像这样调整规则:
RewriteEngine On
RewriteBase /core/
#Check if file exist in original path (/var/www/html/core):
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
#try new path (/var/www/html/core/latest):
RewriteCond %{DOCUMENT_ROOT}/core/latest/$1 -f
RewriteRule ^((?!latest/).*)$ latest/$1 [L,NC]
RewriteCond %{DOCUMENT_ROOT}/core/latest/$1 -f
确保/core/latest/
文件夹中存在该文件。