0

ディレクトリ /SOMESLUG/ 内の 40 の特定の壊れた URL を正しいページまたは新しいページに 301 リダイレクトする必要がありますが、存在しない /SOMESLUG/ 内の他のすべてのページに対して 404 エラーを返します。

次のようなものを使用しています (例のように名前が簡単なパターンに従っていないことに注意してください)。

Redirect 301 /SOMESLUG/wrong1.html /SOMESLUG/right1.html
Redirect 301 /SOMESLUG/wrong2.html /SOMESLUG/right2.html
...
Redirect 301 /SOMESLUG/wrong40.html /SOMESLUG/right40.html

ただし、ルールがある限り

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/SOMESLUG/(.*)
RewriteRule ^(.*)$ /sumeslug [R=404,L]

htaccess ファイルで (301 リダイレクト ディレクティブの後でも)、リダイレクトは失敗し、404 ページが返されます。

htaccess でこれを実現する方法はありますか、それともスタンドアロン スクリプトを作成する必要がありますか?

4

1 に答える 1

0

.htaccess 自体で間違いなく実行できます。mod_alias と mod_rewrite を混在させないでください。mod_rewrite を介してすべてを処理することをお勧めします。

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteRule ^SOMESLUG/wrong1\.html$ /SOMESLUG/right1.html [L,R=301,NC]
RewriteRule ^SOMESLUG/wrong2\.html$ /SOMESLUG/right2.html [L,R=301,NC]

# will not be executed for real files, directories or links
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^SOMESLUG(/.*|)$ - [R=404,L]

また、Apache 構成を制御できる場合は、RewriteMapを使用することを強くお勧めします。

于 2013-05-31T04:27:18.123 に答える