0

Web サイトのディレクトリの名前を変更しました。既存のすべての URL を新しい URL にリダイレクトするにはどうすればよいですか。

たとえば、「MyFolder」の名前を「mydirectory」に変更しました。では、http: //mywebsite.com/MyFolder/somepage.htmlhttp://mywebsite.com/mydirectory/somepage.htmlにリダイレクトし、 http: //mywebsite.com/MyFolder/anotherpage.htmlをhttp にリダイレクトするにはどうすればよいですか。 //mywebsite.com/mydirectory/anotherpage.htmlなど.htaccess ファイルのいくつかのルールを使用します。

以下は、私の .htaccess ファイルの内容です。WordPressの他のいくつかのルールがあります。

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

RewriteRule ^/Wordpress/(.*)$ http://example.com/wordpress/$1 [R=301,L]

</IfModule>

# END WordPress

したがってRewriteRule ^/Wordpress/(.*)$ http://example.com/wordpress/$1 [R=301,L]、私の知識どおりに機能するはずです。しかし、それは機能していません。

興味深いことに、次のルールが私の問題を解決しました。しかし、私はその方法を学びたいです。

Redirect 301 /Wordpress/ http://example.com/wordpress/

これがどのように機能するか教えてください。

4

1 に答える 1

0

いくつか問題があります。

.htaccess で URL を照合する場合、RewriteRule で照合する値は完全な URI ではなく相対パスであることを覚えておくことが重要です (つまり、ルート スラッシュは含まれません)。これを削除するか、VirtualHosts と .htaccess の間でコードを転送できるようにするオプションにすることができます。

RewriteRule ^/?Wordpress/(.*)$ http://example.com/wordpress/$1 [R=301,L]

2 番目の問題は、すべての URL に一致し、新しいルールの前に L フラグを持つ RewriteRule があることです。L フラグはそれを最後に処理されるルールにするため、新しい RewriteRule がトリガーされることはありません。RewriteBase の直後に移動します。

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteRule ^/Wordpress/(.*)$ http://example.com/wordpress/$1 [R=301,L]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

</IfModule>

# END WordPress

最後に、私がよく理解していないのは (おそらく架空の例を作成したためです)、Wordpress ディレクトリを移動した場合、Wordpress の .htaccess ファイル内にリダイレクトがあるように見えないことです。移動された場合、パスはファイルにヒットしません。

于 2012-11-15T13:44:53.607 に答える