Назад | Перейти на главную страницу

Как сопоставить путь к path.html в Apache?

Мой старый сайт был динамическим, поэтому все постоянные ссылки были такой формы:
http://wangling.me/2000/01/file или ''http://wangling.me/2000/01/file/`

Теперь я просто перестроил свой сайт со статическими 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>

Но это не работает. Вот соответствующие журналы:

[Сб, 19 января, 00:49:01 2013] [ошибка] [клиент 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)?

Путем проб и ошибок я обнаружил, что 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>