4

WordPressブログがあり、それにカスタムページを追加して、.phpURLから拡張子とクエリ文字列を削除したいと思います。

すべてのWordPressページのURLはのようなものなので、ファイルにindex.php?pagename=追加しようとすると、他のページはに戻ります。とを除くすべてからphp拡張子を削除するにはどうすればよいですか?RewriteRule ^(.*)$ $1.php.htaccess500 internal server errorindex.phplogin.php

これが私の既存の.htaccessファイルです:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# RewriteRule ^(.*)$ $1.php  # add this line will broken the wordpress rewrite rule
</IfModule>
# END WordPress
4

4 に答える 4

7

たとえば、いくつかのカスタム php ページを追加する場合は、独自の書き換えを標準の Wordpress 部分の前に追加する必要がありますが、RewriteBase /.

ここでは、プライベート ディレクトリ内に保存されているカスタム ページを処理できるように、いくつかの書き換えを追加しましたcustom

    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    # *** START CUSTOM PART ***
    RewriteRule ^page1$     /custom/page1.php    [L,QSA]
    RewriteRule ^page2$     /custom/page2.php    [L,QSA]
    # *** END CUSTOM PART ***

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

サイトが で利用できる場合http://www.example.com、カスタム ページには を使用してアクセスでき http://www.example.com/page1ますhttp://www.example.com/page2

書き換えフラグに関するいくつかの言葉[L,QSA]

  • L- 書き換えが一致した場合は、書き換えプロセスをすぐに停止し、それ以上ルールを適用しないでください。
  • QSA- 元のリクエスト URL のクエリ文字列をカスタム ページに追加します。これは、呼び出しhttp://www.example.com/page1?foo=bar&c=1が内部的に次のように書き換えられることを意味します/custom/page1.php?foo=bar&c=1

ご注意ください:

  1. WordPress サイトに「page1」という名前のページが既にある場合、このページは書き換えルールに追加されたカスタム ページによって上書きされます。
  2. これらの Apache httpd ディレクティブは標準であり、Wordpress によって生成され、Permalink Settings. カスタムパーツを追加しました。
  3. Permalink Settingsを変更するたび.htaccessに上書きされ.htaccessます。パーミッションを変更してファイルを読み取り専用にした方がよいでしょう。そして、いずれにしても、.htaccess 構成のコピーを保存してください。

一方、Wordpress の URL をより SEO フレンドリーにしたい場合、つまり、URL に.phpページがなく、完全なクエリ文字列がなく、一意の識別子として投稿/ページ スラッグのみが必要な場合は、次のオプションにアクセスしWordpress Permalink Settingsて選択することができます。Post name

ワードプレスのパーマリンク設定

を有効にするPermalink Settingsと、Apache httpd の作業は .htaccess 部分に限定されます。これは、Apache が .htaccess を介してすべて (リクエスト ヘッダーと本文) を index.php ページにリダイレクトし、Wordpress がすべての書き換えを内部的に実装することを意味します。WordPress の構成に関する提案がさらに必要な場合は、 https://wordpress.stackexchange.com/に質問を書き込むことをお勧めします。

于 2013-01-31T00:29:08.007 に答える
1

WordPressには、htaccessファイルを手動で変更せずにURL書き換えが組み込まれています。「設定」->「パーマリンク」で、WordPress管理者にURLを表示する方法を選択できます。

WordPressには、必要に応じてURLをさらに微調整するために使用できるクラスWP_Rewriteも用意されています。

于 2013-01-31T00:42:51.087 に答える
1
# 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

まあ、これは .php をインデックスに残すことはありませんが、少なくとも 500 内部サーバー エラーなしで動作します。なぜ index.php を保持する必要があるのですか? Login.php は古い形式になります。

于 2013-01-27T14:14:52.193 に答える
0

あなたの質問に対する最も明白な答えは、 RewriteRule の前に RewriteCond を追加することです

RewriteCond %{REQUEST_URI} !^/(index|login).php$

これはまさにあなたが望むものを達成するでしょう。index.php と login.php 以外のすべてのリクエストには、ルールによって .php が追加されるため、それらをリクエストしなくても機能します。

現在、ルールは index.php と login.php を index.php.php と login.php.php に変換します。それを解決するより論理的な方法は、おそらく代わりにこれを追加することです:

RewriteCond %{REQUEST_URI} !.*php$

次に、.php のないものを .php と同じものに変換します。

RewriteRule は、必要だと言ったにもかかわらず、クエリ文字列を削除していないことに注意してください。次のように変更すると、クエリ文字列が削除されます。

RewriteRule ^(.*)$ $1.php?

? を追加しない場合 デフォルトで query_string を追加します

于 2013-01-31T08:59:07.103 に答える