1

codeigniter を使用して Web サイトを開発しました。以前のサイトの URL 構造は長かったので、新しい Web サイトでは短くしました。

htaccess でリダイレクト ディレクティブを使用しましたが、404 エラーが発生します。古いコントローラーと関数をすべて削除しました。

以下は、htaccess からの数行です (新しい URL にリダイレクトする多くの URL があります)。

RewriteEngine On

# Redirect non-www urls to www

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

#RewriteRule ^([^_]*)_(.*)$ /$1-$2 [R=301,L] 

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]

Redirect 301 /payments/charity_and_donations/paid http://www.mysite.com/charity
Redirect 301 /outwards/office_furniture/damaged http://www.mysite.com/office_assets
Redirect 301 /funding/business_and_person/inward http://www.mysite.com/funds

古いものから新しいものにリダイレクトされない理由と、何が間違っているのか誰か教えてもらえますか?

4

2 に答える 2

1

URI を にルーティングする前に、リダイレクトを行う必要があります/index.php。また、Redirectmod_alias の一部であり、他のリダイレクト/ルーティング ルールが mod_rewrite であるため、URI は想定されていないときに 2 回処理されています。mod_rewrite を使用して、最初にルールを追加するだけです。

RewriteEngine On

# Redirect non-www urls to www
RewriteCond %{HTTP_HOST} ^mysite\.com [NC]
RewriteRule (.*) http://www.mysite.com/$1 [R=301,L] 

RewriteRule ^payments/charity_and_donations/paid http://www.mysite.com/charity [R=301,L]
RewriteRule ^outwards/office_furniture/damaged http://www.mysite.com/office_assets [R=301,L]
RewriteRule ^funding/business_and_person/inward http://www.mysite.com/funds [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]
于 2013-09-03T19:53:12.067 に答える
0

以下のコードを試してみてください。これは私にとって完璧に機能します

RewriteCond %{HTTP_HOST} !^www\.yoursite\.com$ [NC]
RewriteRule ^(.*)$ http://www.yoursite.com/$1 [L,R=301]
于 2013-09-03T20:02:11.800 に答える