Мой старый сайт был динамическим, поэтому все постоянные ссылки были такой формы:
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>