最近、301を管理するための形式を切り替えました。ほとんどの場合、すべてがうまくいきましたが、mod_spelingが適切に動作しなくなったようです。変更点は次のとおりです。
/var/www/html/.htaccess
:RewriteEngine on
RewriteBase /
# Change SHTML to HTML
RewriteRule ^(.*)\.shtml$ $1.html [R=permanent,L]
# Change PCF to HTML ('cause, you know, we probably have CMS users like that...)
RewriteRule ^(.*)\.pcf$ $1.html [R=permanent,L]
# Force WWW subdomain for all requests
RewriteCond %{HTTP_Host} !^www.example.edu$ [NC]
RewriteRule ^(.*)$ http://www.example.edu/$1 [R,L]
# User accounts are on Sun.example.edu
RedirectMatch ^/~(.*)$ http://Sun.example.edu/~$1
# Remove index.html at the end of URLs
RewriteCond %{REQUEST_URI} ^(.*/)index\.html$ [NC]
RewriteRule . %1 [R=301,NE,L]
Redirect 301 /academics/calendar2012-13.html http://www.example.edu/academics/calendar.html
Redirect 301 /academics/departments/ http://www.example.edu/majors/
Redirect 301 /academics/Pre-Medical.pdf http://www.example.edu/academics/Pre-Medicine.pdf
Redirect 301 ...
/var/www/html/.htaccess
:RewriteEngine on
RewriteBase /
# Change SHTML to HTML
RewriteRule ^(.*)\.shtml$ $1.html [R=permanent,L]
# Change PCF to HTML ('cause, you know, we probably have CMS users like that...)
RewriteRule ^(.*)\.pcf$ $1.html [R=permanent,L]
# Force WWW subdomain for all requests
RewriteCond %{HTTP_Host} !^www.example.edu$ [NC]
RewriteRule ^(.*)$ http://www.example.edu/$1 [R,L]
# User accounts are on Sun.example.edu
RedirectMatch ^/~(.*)$ http://Sun.example.edu/~$1
# Remove index.html at the end of URLs
RewriteCond %{REQUEST_URI} ^(.*/)index\.html$ [NC]
RewriteRule . %1 [R=301,NE,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) 404/$1
そして、/var/www/html/404/.htaccess
に新しいファイルを追加しました。
RewriteEngine on
RewriteBase /404
RewriteRule ^academics/calendar2012-13.html$ /academics/calendar.html [R=302,L]
RewriteRule ^academics/departments/$ /majors/ [R=301,L]
RewriteRule ^academics/Pre-Medical.pdf$ /academics/Pre-Medicine.pdf[R=301,L]
RewriteRule ...
Httpd.confへの(Webminベースの)アクセスがあります(可能な場合、301をすべて格納する必要はありません)。独自のデータセンターのサーバー上のRHEL 6でApache 2.2.15を実行しています。
私が言ったように、私たちが見ている唯一の問題はmod_spelingがもはやその魔法をしていないということです。新しいフォーマットには、古いものよりも多くの利点があり、私たちは本当に戻りたくありませんが、mod_spelingは非常に良いので、可能であれば機能することを本当に望んでいます。 mod_spelingを修正する方法についてのアイデアはありますか?
mod_spelingとmod_rewriteは、同じフェーズでルールを適用します。書き換えがURLに触れた場合、通常はmod_spelingにURLを渡しません。 mod_spelingの魔法の実行を妨げている書き換えルールでは、「パススルー」[PT]フラグを使用できます。 [PT]フラグが設定されている場合、mod_spelingは引き続きその役割を果たします。
もう1つ、404ハンドラー用のスクリプトを配置します。これにより、スクリプト内のURLを調べて、大文字と小文字の区別、推測可能な切り捨て、「。html」の後に追加される文字などのルールに基づいてリダイレクトを発行できます。私が実際に得ていた404エラーでより良い仕事をした404ハンドラを実装できるとわかったとき、mod_spelingの使用をやめました。