0

既存のページに mod_rewrite を統合しようとして、完全に途方に暮れています。現在、私は新しいサイトをゼロから構築しています。そこには、次のようなきれいな URL があります。

http://www.example.nl/nl/example

Cms made simple を実行している古いサイトには、新しいページにリダイレクトする必要がある書き換えられていない URL がいくつかあります。これらの URL は次のようになります。

http://www.example.nl/index.php?page=cake-and-pie&hl=nl_NL

しかし、そのような短いバージョン:

http://www.example.nl/index.php?page=cake-and-pie

も働きます。

通常のように、パラメーター付きの URL を「リダイレクト 301」で単純にリダイレクトできないことを理解するのにしばらく時間がかかりました。そこで、 thisthisなどのオンラインの mod_rewrite ジェネレーターをいくつか試しましたが、それらによって出力されたルールは 404 エラーしか発生しません (リダイレクトはまったく機能しません)。

現在の .htaccess ファイルは次のようになります。

RewriteEngine On
RewriteBase /

# remove .php;
RewriteCond %{THE_REQUEST} ^GET\ (.*)\.php\ HTTP
RewriteRule (.*)\.php$ $1 [R=301]

# remove index
RewriteRule (.*)/index$ $1/ [R=301]

# remove slash if not directory
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} /$
RewriteRule (.*)/ $1 [R=301]

# add .php to access file, but don't redirect
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.php [L]

古いページが存在するようになります。古いページを新しいページにリダイレクトするにはどうすればよいですか?

ありがとう。

編集

RewriteCond %{QUERY_STRING} =page=pie
RewriteRule ^index\.php$ /nl/? [L,R=301]
RewriteCond %{QUERY_STRING} =page=pie&hl=nl_NL
RewriteRule ^index\.php$ /nl/? [L,R=301]

トリックを行うようです。もちろん、これはすべての URL の手動ですが、私はいくつかしか持っていません。

4

1 に答える 1

0
RewriteEngine On
RewriteBase /
RewriteRule ^(.+)/([^/]+)/?$    index.php?page=$1&hl=$2
RewriteRule ^([^/]+)/?$         index.php?page=$1 [QSA]
于 2011-06-14T14:22:10.580 に答える