我的旧网站是动态的,所以所有的永久链接都是这种形式:
http://wangling.me/2000/01/file
或“http://wangling.me/2000/01/文件/`
现在我刚刚用静态 html 文件重建了我的网站,因此永久链接变成:
http://wangling.me/2000/01/file.html
因此我想将旧的永久链接映射到新的永久链接。我在以下位置编写了此代码/etc/apache2/sites-enabled/wangling.me
:
<VirtualHost *:80>
ServerAdmin xxx
ServerName wangling.me
ServerAlias *.wangling.me
DocumentRoot doc_root
RewriteEngine On
RewriteCond /$1 !-d
RewriteCond /$1 !-f
RewriteCond /$1.html -f
RewriteRule ^/([^.]+?)/*$ /$1.html
</VirtualHost>
但是不起作用。以下是相关日志:
[2013 年 1 月 19 日星期六 00:49:01] [错误] [客户端 24.12.163.253] 文件不存在:doc_root/2012/05/xyz
所以似乎RewriteRule
没有使用。我知道我的配置一定有问题,因为我甚至不确定Pattern
中到底是什么RewriteRule Pattern Substitution
。它是绝对 URL 吗?(http://wangling.me/2012/05/xyz)、相对URL(2012/05/xyz)、绝对文件路径(doc_root/2012/05/xyz)还是相对文件路径(2012/05/xyz)?
答案1
通过反复尝试,我发现Pattern
是相对 URL(/2012/05/xyz) RewriteRule Pattern Substitution
。因此正确的配置是:
<VirtualHost *:80>
ServerAdmin xxx
ServerName wangling.me
ServerAlias *.wangling.me
DocumentRoot doc_root
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}/$1 !-d
RewriteCond %{DOCUMENT_ROOT}/$1 !-f
RewriteCond %{DOCUMENT_ROOT}/$1.html -f
RewriteRule ^/([^.]+?)/*$ /$1.html
</VirtualHost>