それで私は長い間これを試みてきました、しかし私はそれを働かせることができないようです。私のウェブサイトはhttps://example.com
で、そのほかのページはhttps://example.com/abc
とhttps://example.com/abc-def-g
です。上記の2ページを除いて、計画はすべてのページ(存在するページと存在しないページの両方)に対して自動的にホームページにリダイレクトすることです。
私が試みたことはすべて失敗しました、私がウェブサイトにアクセスすることを妨げているか、あるいは全く何もしないことのどちらかです。
現時点でこれは.htaccess
ファイルです。
# 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]
</IfModule>
# END WordPress
# BEGIN EWWWIO
# END EWWWIO
これはWordPressの標準ファイルです。任意の助けは大歓迎です!
以下を試してください、before既存のWordPressディレクティブ。
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !^(abc|abc-def-g)$ / [R,L]
これは、/abc
または/abc-def-g
ではなく、物理ファイルまたはディレクトリ(つまり、静的リソース、画像、CSS、JSなど)にマッピングされていないURLについては、ホームページにリダイレクトすることを示しています。
RewriteRule
patternの!
接頭辞は正規表現を否定します。
これは一時的な(302)リダイレクトです。
RewriteEngine On
ディレクティブを繰り返す必要はありません。
更新: あなたのURLが末尾のスラッシュで終わっているなら、あなたはRewriteRule
patternを修正するべきです:
RewriteRule !^(abc|abc-def-g)/$ / [R,L]
または、末尾のスラッシュをオプションにします。
RewriteRule !^(abc|abc-def-g)/?$ / [R,L]
同じことを書く別の方法は(あなたがコメントで述べたように)RewriteCond
patternの代わりにREQUEST_URI
サーバー変数をチェックするためにRewriteRule
name__ディレクティブを使うことです。これは読みやすくなるかもしれませんが、RewriteRule
patternが常に最初に処理されるため、わずかに効率が悪くなります。例えば:
RewriteCond %{REQUEST_URI} !^/abc/?$
RewriteCond %{REQUEST_URI} !^/abc-def-g/?$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ / [R,L]
これは、(代替を使用して)同じです。
RewriteCond %{REQUEST_URI} !^/(abc|abc-def-g)/?$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ / [R,L]