0

私は何年にもわたって mod_rewrite ルールを頻繁に使用してきましたが、これが機能しない理由を理解していない理由です。

RewriteRule ^cottage/house/(.*)/(.*)$ /cottage/house/$1?query=$2 [L]

次の .htaccess ファイルと一緒に使用しています。

RewriteEngine On

Rewritecond %{HTTP_HOST} !^www\.website\.com
RewriteRule (.*) http://www.website.com/$1 [R=301,L]

RewriteBase /
RewriteRule ^index\.php$ - [L]

# uploaded files
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule  ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule  ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]

このコードは、フォーマットの URL/cottage/house/housename/about/cottage/house/housename?query=about... にする必要があります。どんなアイデアでも大歓迎です。

4

2 に答える 2

0

私はなんとか問題を解決しました.Wordpressには独自の対処方法がありmod_rewriteます.

以下のコードは、Wordpress が理解できるように URL を内部的に書き換えます。

function ong_custom_house_pages() 
{
    function add_query_vars($houseVars) 
    {
        $houseVars[] = "current_house_page"; 
        return $houseVars;
    }
    add_filter('query_vars', 'add_query_vars');
    add_rewrite_rule("^houses/([^/]+)/([^/]+)/?",'index.php?
    houses=$matches[1]&current_house_page=$matches[2]','top');
}
add_action('init','ong_custom_house_pages');

これが同様の問題を抱えている人に役立つことを願っています。

于 2012-08-11T10:39:18.047 に答える
0

単独で使用すると、ルールは非常にうまく機能します。

問題は[L]、ルール内の は、このルール セット (.htaccess ファイル) のルールがこの処理ステップで処理されないことを意味するだけであることです。

ただし、書き換えられ/cottage/house/housename?query=aboutた URL は URL 解析エンジンに返されます。一致するルールが内部リダイレクトを引き起こしているため、URL はルール セットによって (サブリクエストとして) 再度処理されます。

一致する実際のファイルまたはディレクトリ/cottage/house/housename?query=aboutは存在しないと思います。また、この URL が別のルールに引っかからないことも想定しています。これにより、ルールRewriteRule . index.php [L]が一致し、さらに別のサブリクエストが発生し、今度index.phpはインデックス ページが表示されます。これが、ルールが正しく機能していないように見える理由です。

これを解決するには?

最初のサブリクエストが通常のルールでキャッチされることを確認してください。実際のRewriteRule値は、全体的な URL 構造がどのように見えるか、およびサンプル コードで指定されていない他のルールがアクティブであるかによって異なります。

于 2012-07-21T22:25:19.763 に答える