web-dev-qa-db-ja.com

URLの一部のみを一致させ、.htaccessのパラメータでURLをリダイレクトするにはどうすればよいですか?

同様の構造のリンクがいくつかあります。

example.com/index.php/path/some-path/some-subpath?parameter=1

example.com/category/にリダイレクトしたいだけです

しかし、私はURLパスのみに一致させたいのです。 /index.php/path/some-path/some-subpath。これは、クエリパラメータが無関係であるためです。

私は次のルールを試しました:

RewriteRule ^/index.php/path/some-path/some-subpath?parameter=\dd\? /category/ [L,R=301]
1
Alan Kis

クエリ文字列が無関係である場合、単純に無視できます。 (とにかくRewriteRuleディレクティブでクエリ文字列を一致させることはできません。)

ルート.htaccessファイルで次のことを試してくださいredirectリクエスト:

RewriteEngine On
RewriteRule ^index.php/path/some-path/some-subpath$ /category/? [L,R=301]

ディレクトリごとの.htaccessファイルでは、RewriteRulepatternに一致するURLパスのディレクトリプレフィックスが削除されます。つまり、^index.php....ではなく、^/index.php....で始まるスラッシュではありません。

リクエストからクエリ文字列(ある場合)を削除するには、RewriteRule置換の最後にある?が必要です。それ以外の場合、parameter=1はパススルーされ、ターゲットURLに追加されます。

これは、空の文字列を含むanyクエリ文字列に一致します。

2
MrWhite

@MrWhiteによる回答は私にとってはうまくいきませんでした。これが私のWordpressサイトで機能しているものです。

例:

OLD URL: http://website.com/xxx/yyy/picture.png
NEW URL: http://website.com/wp-content/picture.png

そこで、/ xxx/yyy /をWordPressの通常の/ wp-content /パスに置き換えたいと思います。

これを.htaccessファイルに入れます。

RewriteEngine on
RedirectMatch 301 /xxx/yyy/(.*) http://website.com/wp-content/$1
0
xlimit91