如果文件或文件夹不存在,我有以下配置仅用于index.html
,以便与AngularJS一起使用。
<VirtualHost 192.168.0.1:80>
DocumentRoot /path/to/my/folder
RewriteEngine On
# If an existing asset or directory is requested go to it as it is
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
RewriteRule ^ - [L]
# If the requested resource doesn't exist, use index.html
RewriteRule ^ /index.html
ErrorLog "/var/log/apache2/angular.com-error.log"
CustomLog "/var/log/apache2/angular.com-access.log" common
</VirtualHost>
我想做的是:
检查REQUEST_URI
是否以ru | es | gr之类的lang前缀开头,将这2个字母添加到index.html
因此,如果访问example.com
apache将从当前root用户提供index.html但如果我访问example.com/ru
apache将从index.html
+ ru文件夹/ ru / index提供DOCUMENT_ROOT
html的
我做过这样的事情:
<VirtualHost 192.168.0.1:80>
DocumentRoot /path/to/my/folder
RewriteEngine On
# If an existing asset or directory is requested go to it as it is
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
RewriteRule ^ - [L]
# If the requested resource doesn't exist, use index.html
RewriteCond %{REQUEST_URI} ^/(ru|es|gr)/
RewriteRule ^ $1/index.html
ErrorLog "/var/log/apache2/angular.com-error.log"
CustomLog "/var/log/apache2/angular.com-access.log" common
</VirtualHost>
但似乎没有用。
答案 0 :(得分:2)
你使用的是$ 1,但是这种类型的变量引用仅适用于来自rewriterule而不是来自rewritecond的捕获组,并且你在rewriterule中没有捕获任何内容,正确的做法是在1个单指令中执行它:
RewriteRule ^/(ru|es|gr)/ /$1/index.html
如果您坚持使用其他不需要的重写,使用正确的捕获变量,请注意从重写中捕获的组使用%符号而不是$:
RewriteCond %{REQUEST_URI} ^/(ru|es|gr)/
RewriteRule ^ /%1/index.html
注意:您可能在此错过了一个L标志。