web-dev-qa-db-ja.com

.htaccessの書き換え規則は上書きされますか?

functions.phpにカスタムの書き換え規則を追加したり、カスタムのパーマ構造を追加してもうまくいきません。私はこのコードを.htaccessに持っています。

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# BEGIN IPHONE RULES
RewriteRule ^mobile/([^/]+)$ mobile/index.php?action=$1 [QSA,L]
# END IPHONE RULES
# BEGIN PDF RULES
RewriteRule ^certificates/30-Days-Certificate-([0-9]+)$ pdf/index.php?type=30day&period=$1 [QSA,L]
RewriteRule ^certificates/12-Month-Certificate$ pdf/index.php?type=12Month [QSA,L]
# END PDF RULES
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

しかし、時々デフォルトに更新され、iPhoneとpdfのルールを失います。モバイルは/mobile/progress?userId=22&date=2011-02-21のように呼ばれます。ここでprogressはアクションで、他のものは単なるquery varsです。 .htaccessはうまく機能していますが、カスタムルールを追加してうまく機能させることはできません。任意の助けは大歓迎です。

3
chifliiiii

# BEGIN WordPress# END WordPressの間の部分は、パーマリンクがフラッシュされたときに常に書き換えられます。このセグメントの前に追加の書き換え規則を配置するか、または 外部書き換え規則 としてWordPressに登録することができます。 ( パーマリンク ページにアクセスして)今すぐルールをフラッシュすると、追加のルールが.htaccessファイルに追加されます。

add_action( 'init', 'wpse12708_init' );
function wpse12708_init()
{
    global $wp_rewrite;
    $wp_rewrite->add_external_rule( 'mobile/([^/]+)$', 'mobile/index.php?action=$1' );
    $wp_rewrite->add_external_rule( 'certificates/30-Days-Certificate-([0-9]+)$', 'pdf/index.php?type=30day&period=$1' );
    $wp_rewrite->add_external_rule( 'certificates/12-Month-Certificate$', 'pdf/index.php?type=12Month' );
}
2
Jan Fabry