2017-09-21 14 views
-1

これは、Apacheの[301]のリダイレクトについては多少なりともですが、Joomla CMSには他のいくつかの必要なルールがあります。Apache 2.4のJoomlaで再起動した後に古いURLをリダイレクトする

私たちはJoomla 3でウェブサイトをリニューアルしました。古いものは、他のいくつかのCMSでした。 これで、古いURLを新しい場所にリダイレクトします(301)。

問題はこれが機能していないようです。 私は、私たちのすべての症例に合った解決策(約300点)を得たいと考えています。ここで

は、我々は(新しい=>古い)リダイレクトしたいといくつかの例です:

/index.php?CID=1 =>/
/index.php?CID=2&Kat=1$ =>/
/index.php?CID=3&Kat=2&PID=100 => /new/path 
/old/path/file.extention => /new/file/path 
/old/page.html => /new/page 
/show_image.php?image=123456.jpg&text=Very%20Long%TEXT => /new/path/location 
/show_image.php?image=654321.jpg&text=Very%20Long%TEXT => /other/path/location 

私はすでにのようないくつかのRewriteRules試してみました:

については
RewriteRule ^/index\.php\?CID=1$ http://%{HTTP_HOST}/ [R=301,L] 

OR

RedirectMatch 301 ^/index\.php\?CID=1$/

を一部のURLはRedirectMatchのバージョンは動作しますが、ほとんどはそうではありません。特に、/index.phpで始まるすべてのURLではなく、これはJoomlaのエントリーポイントであるためです。

Joomla RewriteRuleがアクティブになる前に、/index.phpで始まるような具体的なURLをリダイレクトする方法はありますか?

RewriteEngineがオンで、デフォルトのhtaccessがJoomlaで動作しています:SEF URLとURLリライトが有効になっています。

正しい方向にヒントを教えてください。あなたはそれを知っていない場合はTHXここ

がデフォルトJoomlaの.htaccessの設定です:

ところで
<IfModule autoindex> 
    IndexIgnore * 
</IfModule> 

Options +FollowSymlinks 
Options -Indexes 

RewriteEngine On 

RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR] 
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR] 
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR] 
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) 
RewriteRule .* index.php [F] 

RewriteBase/
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 
RewriteCond %{REQUEST_URI} !^/index\.php 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule .* index.php [L] 

答えて

0

私は解決策を自分で見つけて、私はあなたとここでそれを共有したいと思います。

ここでの主な問題は、クエリ文字列でURLをリダイレクトする場合は、RedirectまたはRedirectMatchを使用できないことです。 クエリ文字列書き換え条件で書き換えルールを使用する必要があります。 これは、URLのいくつか(少なくとも私が望むものではない)のために少なくとも2つの行で終わることを意味します。だからここ

は、与えられた例はいくつかのソリューションです:

/index.php?CID=1 =>/
/index.php?CID=2&Kat=1$ =>/

のみクエリ文字列が異なっているが、ファイル/パス(index.phpを)と宛先(/)は、我々ができるのと同じであるため、またはFLAGで書き換え条件を連結:ここ

RewriteCond %{QUERY_STRING} ^CID=29$ [OR] 
RewriteCond %{QUERY_STRING} ^CID=2&Kat=1$ 
RewriteRule ^index\.php$ /? [R=301,L] 

無力はありますか?最後の行に/のみを宛先に設定すると、Apacheはたとえば次のようにリダイレクトされます。 /?次のようにCID = 29だけではなく、/

クエリ文字列を持つ他のたとえば、あなたがそれをしなければならない非常によく似た

/index.php?CID=3&Kat=2&PID=100 => /new/path 
/show_image.php?image=123456.jpg&text=Very%20Long%TEXT => /new/path/location 
/show_image.php?image=654321.jpg&text=Very%20Long%TEXT => /other/path/location 

それらは解きます:

RewriteCond %{QUERY_STRING} ^CID=3&Kat=2&PID=100$ 
RewriteRule ^index\.php$ /new/path? [R=301,L] 

RewriteCond %{QUERY_STRING} ^image=123456\.jpg&text=Very%20Long%TEXT$ 
RewriteRule ^show_image\.php$ /new/path/location? [R=301,L] 

RewriteCond %{QUERY_STRING} ^image=654321\.jpg&text=Very%20Long%TEXT$ 
RewriteRule ^show_image\.php$ /other/path/location? [R=301,L] 

ますのでご注意くださいを追加する必要がありますか?も同様です。

クエリ文字列を使用しないすべての例について、これは通常どおり動作します。ここで 私が言及したことのいくつかの例:

/old/path/file.extention => /new/file/path 
/old/page.html => /new/page 

私達はちょうどこのようにそれをリダイレクトします。

RewriteRule ^old/path/file\.extention$ /new/file/path [R=301,L] 
RewriteRule ^old/page\.html$ /new/page [R=301,L] 

いくつかの追加の発言:

ため、書き換えルールパターン(元のファイル/パス)または書き換え条件パターン(この場合はクエリ文字列)は常にdothが "任意の文字"を意味する正規表現として解釈されます。常にその前に\を付けて、実際には正しいファイルまたはクエリ文字列といくつかのシム"index-php"や "index7php"などの他のファイルもあります。 他のRegEx固有の文字(例: +または*)同じことをする必要があります。

元のURLにスペースが含まれているリライトルールパターンもありますが、これは500エラーが発生しますが、穴書き換えルールパターンを二重引用符で囲むことで非常に簡単に解決できます。

これはApache 2.4で動作します。それが助けてくれることを願っています! Joomlaのに来て.htaccessファイルにこれを配置したいどのようにあなたのすべてのために

カスタムリダイレクトが

あるべき場所です RewriteBase / 前にそれを置く必要があります
関連する問題