如何将路径映射到 Apache 中的 path.html?

如何将路径映射到 Apache 中的 path.html?

我的旧网站是动态的,所以所有的永久链接都是这种形式:
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>

相关内容