2017-07-05 14 views
1

削除する必要がある疑問符を含む複数のURLがあります。このURLへ.htaccessパラメータを指定しないで疑問符をリダイレクト

http://example.net/?/services 

:たとえば、私はこのURLをリダイレクトする必要が

http://example.net/services 

私はこのような多くのより多くを持っているので、私は適切に疑問符として、すべてをキャッチすることができます何かをしたいと思いますそれをリダイレクトします。私が見つけた答えの多くは、書き換えの条件としてQUERY_STRINGを使用しようとしていましたが、パラメータを使用しないとこれは役に立ちません。掘り下げた後、私はRewiteCondが動作するが、RewriteRuleは疑問符のないURLではなく、ホームページにリダイレクトすることが分かった。私が現在持っていることはこれです:

# Remove question mark from string 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(index\.php)?\?([^&\ ]+) 
RewriteRule^/%1? [L,R=301] 

# Removes index.php from ExpressionEngine URLs 
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC] 
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L] 

# Directs all EE web requests through the site index file 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php?/$1 [L] 

最初のブロックは、私がこれまで持ってリライトされ、そして次の二つは、CMSのURLルーティングのためのものです。何が起こっているように見えるのは、最初のブロックの書き換えが残りのURLを保持していないということです。私はいくつかの組み合わせを試したが、URLの残りの部分をそのまま維持する方法を理解できないようだ。

答えて

0

私が見つけた回答の多くは、書き換えの条件としてQUERY_STRINGを使用しようとしていましたが、パラメータを使用しないとこれは役に立ちません。

はい、これはまさに疑問符の付いた最初のURLに含まれています。だから、なぜ「これは助けになれないの? http://example.net/?/servicesのURLには、/servicesがクエリ文字列です。キーと値のペア(すなわち、「パラメータ」)があるかどうかは関係ありません。

ような何かしてみてください、ノーURLパスのみクエリ文字列で構成されフォームhttp://example.net/?/servicesのURLをリダイレクトするには:

# Remove question mark from string 
RewriteCond %{QUERY_STRING} ^/(.+) 
RewriteRule ^$ /%1? [R,L] 

%1は、最後にマッチしたCondPatternの中に取り込んだグループへの後方参照であります(すなわち、(.+)、これはservicesをキャプチャします)。これは、クエリ文字列(?の後)が、スラッシュで始まることを前提としています。 (ちなみに、これはあなたのフロントコントローラは、逆に、行っていることもあるので、私はそれが正しくなければならないと仮定します。)

置換の末尾?はリクエストから元のクエリ文字列を削除します。

以前の/間違った301がブラウザによってキャッシュされているため、ブラウザのキャッシュをクリアしてください。

これが永続的な(301)リダイレクトを意図している場合は、RからR=301に変更してください。ただし、正常に動作していることが確認された場合にのみ変更してください。

+1

これは素晴らしい動作です!ありがとう! –

関連する問題