-2

最近、自分のWebサイトをWordpressに切り替えました。私の古いファイルはwww.example.com/about.phpでしたが、現在はwww.example.com/about/です。できれば.htaccessを使用して、着信リンクを.php拡張子からすべてのページの/にリダイレクトする必要があります。

私が持っているもの:

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

私の.htaccessファイルの内容:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

.htaccessファイルのどこに置くのかもわかりません。ありがとう!

4

2 に答える 2

1

あなたが持っているコードは何もリダイレクトしません。phpファイルのリクエストを受け取り、内部で.php拡張子を追加します。何もするように指示していないため、ブラウザでは何も起こりません。これは、ここでは2ステップのプロセスです。簡単な説明については、この回答の上部を参照してください。

リダイレクトするには、URI(以前のルールまたは反復で書き換えられた可能性があります)ではなく、着信要求と照合する必要があります。

RewriteCond %{THE_REQUEST} ^(GET|HEAD|POST)\ /(.*)\.php($|\ )
RewriteCond %{REQUEST_URI} !wp-admin
RewriteRule ^ /%2/ [L,R=301]

したがって、誰かhttp://www.example.com/about.phpがブラウザのURLアドレスバーに入力すると、リクエストは次のようになります。

GET /about.php HTTP/1.1

%2aboutブラウザを後方参照してリダイレクトし(http://www.example.com/about/末尾のスラッシュに注意)、アドレスバーが変更されます。

次に何が起こるかというと、ブラウザは別のリクエストを行いますが、今回http://www.example.com/about/はサーバーがURIを取得します/about/。ここで、ルールを内部的にphpファイルに書き戻す必要があります。残念ながら、ルールは末尾のスラッシュを処理しないため、次のようなものが必要です。

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/(.*?)/?$
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteRule ^ /%1.php [L]

これらはすべてあなたのワードプレスのルールの前に行きます。ワードプレスのルールはすべてをにルーティングしindex.php、それはあなたが書き直そうとしているURIを破壊します。

于 2012-11-08T16:53:06.933 に答える
0

あなたは物事を間違った方法でやっています。実際には、phpなしで終了するURLを、.phpで終了するファイルに書き換えています。

あなたはこのようなことをする必要があるでしょう:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*).php$ $1/ [NC]

また、リダイレクト先のファイルが存在するかどうかのチェックと[L]フラグも削除しました。これは、wordpressも独自の書き換えを行っている可能性があるためです。つまり、これが最後に処理されるルールになりたくないということです。ファイルシステム上でファイルを見つけることができなくなります。

于 2012-11-08T16:21:30.933 に答える