0

それで、私は末尾の ? を取り除くために一生懸命努力してきました。SEOの重複を避けるためにURLに。基本的に私は次のようなURLを持っています

www.example.com/some/thing?

そして、私はそれをにリダイレクトする必要があります

www.example.com/some/thing

私のhtaccessには次のものがあります:

# Remove trailing ?
RewriteCond %{REQUEST_METHOD} (GET) [NC]
RewriteCond %{THE_REQUEST} \?\ HTTP [NC] 
#RewriteRule ([a-zA-Z0-9-/.=&:?]*)\?$ $1 [R=301,L]
RewriteRule ^(.*)$ $1 [r=301,l]

テスターを使用して 4 行目で正規表現をテストしたところ、URL 全体で完全に機能するようになりました。次に、変数 THE_REQUEST が何を返すかを確認するために htacces を不正に操作したところ、コードは機能しているのに何か問題があることに気付きました。これは、上記のコードで rewrite.log に記録されるものです。

127.0.0.1 - - [22/Jan/2013:16:08:09 --0800] [www.example.com/sid#2cb480][rid#eb90f8/initial] (2) init rewrite engine with requested uri /some/thing
127.0.0.1 - - [22/Jan/2013:16:08:09 --0800] [www.example.com/sid#2cb480][rid#eb90f8/initial] (3) applying pattern '^(.*)$' to uri '/some/thing'
127.0.0.1 - - [22/Jan/2013:16:08:09 --0800] [www.example.com/sid#2cb480][rid#eb90f8/initial] (4) RewriteCond: input='GET' pattern='(GET)' [NC] => matched
127.0.0.1 - - [22/Jan/2013:16:08:09 --0800] [www.example.com/sid#2cb480][rid#eb90f8/initial] (4) RewriteCond: input='GET /some/thing? HTTP/1.1' pattern='\?\ HTTP' [NC] => matched
127.0.0.1 - - [22/Jan/2013:16:08:09 --0800] [www.example.com/sid#2cb480][rid#eb90f8/initial] (2) rewrite '/some/thing' -> '/some/thing'
127.0.0.1 - - [22/Jan/2013:16:08:09 --0800] [www.example.com/sid#2cb480][rid#eb90f8/initial] (2) explicitly forcing redirect with http://www.example.com/some/thing
127.0.0.1 - - [22/Jan/2013:16:08:09 --0800] [www.example.com/sid#2cb480][rid#eb90f8/initial] (1) escaping http://www.example.com/some/thing for redirect
127.0.0.1 - - [22/Jan/2013:16:08:09 --0800] [www.example.com/sid#2cb480][rid#eb90f8/initial] (1) redirect to http://www.example.com/some/thing? [REDIRECT/301]

ログについて私が理解していることから、正しくリダイレ​​クトされていますが、何らかの理由で、リダイレクト時に rewriterule の後に最後に疑問符が追加されています。何が起こっているのか、これを修正する方法について何か考えはありますか?

また、4行目のコメントを外し、5行目のコメントを付けて「リグを解除」すると、URL全体(URI + QUERY)ではなく/some/stringに対してテストしているため、Apacheはルールに従いません。URIだけでなくRewriteRuleのURL全体に対してApacheチェックを行うにはどうすればよいですか?

注: URL は動的であるため、リダイレクトをハードコードすることはできません。

4

1 に答える 1

0

RewriteRule ディレクティブから

クエリ文字列の変更
...
既存のクエリ文字列を消去する場合は、置換文字列を疑問符だけで終了します。
...

したがって、単に追加する必要があります?

RewriteRule .* http://www.example.com/$0? [R,L]

有効にしてテストしない301でください。この回答を参照してください.htaccess書き換えルールをデバッグするためのヒント

于 2013-01-23T01:58:15.997 に答える