0

Apache を使用して、標準のスニペットを使用して「myfile」のリクエストを「myfile.php」にルーティングしています。

# Add .php-extension to base URLS using rewrite (so links can omit it)
<IfModule mod_rewrite.c>
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME}\.php -f
  RewriteRule ^(.*)$ $1.php
</IfModule>

そしてそれは動作します。ブラウザに「mydomain.com/myfile」と入力すると、ページが読み込まれ、URL バーに「.php」が表示されません。偉大な。

しかし今では、以前の場所 "mydomain.com/myfile.php" にあるページを引き続き表示できることも明らかです。そして、それにはいくつかの問題があります:

1) SEO: 私はリンク ジュースを薄め、コンテンツを 2 つの URL (「.php」を含む URL と含まない URL) に分けています。重要ではありませんが、ちょっと...

2) 世界中のサイトへの既存の公開リンクには、整形されていない URL が引き続き表示されます。うん。

3) 最も重要なことは、既存のすべての内部ナビゲーション リンクが引き続き、整形されていない URL を指すことです。ディールブレイカー

この時点で私の頭は回転し始めます。私が望むのは、サーバー上の「.PHP」以外のバージョンを「.PHP」に書き換えることだけでなく、拡張子を持つ古いリンクを拡張子のないコンテンツにリダイレクトすることだと思います。この難問を回避する標準的な「ベストプラクティス」の方法はありますか? 私のナビゲーションを通過し、リンクからすべての「.php」ファイル拡張子を削除して、拡張子を完全に削除する必要がありますか? 間違ったパスのように見えますが、可能性として発生しています :) さらに深刻なことに、PHP ファイルを拡張子なしで LAMP スタックに保存しても安全でしょうか? (私はそれを避けるには条件が多すぎて、試したことさえありません)。Pretty URL への移行を完了するにはどうすればよいですか?

ご指導いただきありがとうございます。

4

1 に答える 1

1

短期

すべての非プリティ リンクには RewriteRule があり、対応するプリティ リンクにstatus=301 (永久リダイレクト)でリダイレクトされます。そうすれば、検索エンジンは新しいきれいなリンクのキャッシュを開始し、古いきれいでないリンクをすべて徐々に破棄します. その部分の .htaccess は次のとおりです。

## hide .php extension
# To externally redirect /dir/foo.php to /dir/foo with 301
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=301,L]

## To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.*?)/?$ /$1.php [L]

長期

内部の非プリティ リンクをプリティ リンクに変換することを検討してください (削除\.php)。

于 2013-04-02T17:42:49.010 に答える