1

最近、サイトのファイル拡張子を .html から .php に切り替えました。その結果、私は次のことをしたいと思います:

  1. .html ファイルを対応する .php ファイルにリダイレクトする

  2. すべての URL から .php 拡張子を削除します

  3. 拡張子のない URL が機能する必要があります (たとえば、foo.com/bar は foo.com/bar.php にあるページを表示する必要があります)。

これが私の現在のアプローチであり、さまざまな情報源からまとめたものです。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)\.html$ $1.php [L]
RewriteRule ^([^\.]+)$ $1.php [NC,L]

私のアプローチには、少なくとも 3 つの問題があります。

  1. foo.domain/bar.php にアクセスしようとすると、.php 拡張子が残ります (特に、foo.domain/bar適切な .php ページを表示します)。

  2. .html ファイルのリクエストでは適切な .php ページが表示されますが、拡張子 .html は残ります (拡張子を表示したくありません)

  3. URL に index.php を含めずにディレクトリにアクセスすることは不可能になりました (たとえば、foo.com/bar/ は 404 エラーをスローします)。

明らかなように、mod_rewrite は非常に難しいと思います。どんな助けでも大歓迎です。

4

1 に答える 1

0

私の頭のてっぺんの

RewriteEngine On
RewriteBase /
Options -MultiViews

# redirect /foo.html to /foo
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)\.html$ $1 [L,R=302]

# redirect /foo.php to /foo
RewriteCond %{THE_REQUEST} \.php
RewriteRule ^([^\.]+)\.php$ $1 [L,R=302]

# rewrite /foo to /foo.php if and only if /foo.php exists
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
于 2013-02-04T17:59:59.587 に答える