1

私はこの状況を持っています:
のようなすべての URL/sport.htmlは、実際の URL を非表示にします/archive.php?action=search&section=sport

#This is the RULE:
RewriteRule ^([a-zA-Z_]+([a-zA-Z0-9_]+)?)(-([0-9]+))?\.html$ /archive.php?action=search&section=$1 [L]

ここで、実際の URL とページへのすべての直接アクセスを非表示にしたいのですarchive.phpが、次のルールでリダイレクト ループ エラーが発生します。

RewriteRule ^archive\.php.*$ /404.html [F,NC,L]
4

3 に答える 3

1

最初のルールが一致しないことを確認する必要があります404.html。そのために使えますRewriteCond。詳細については、ドキュメントを参照してください。

RewriteCond %{REQUEST_URI} !^404\.html$
RewriteRule ^([a-zA-Z_]+([a-zA-Z0-9_]+)?)(-([0-9]+))?\.html$ /archive.php?action=search&section=$1 [L]
于 2013-10-18T16:21:45.737 に答える
1

あなたが実際に探しているのはこれではないと思います:

RewriteRule ^archive\.php.*$ /404.html [F,NC,L]

明らかに、これはループを引き起こします。最初のルールは に書き換えられarchive.php、このルールはそれを別のものに書き換えるなどです。

上記のルールの代わりにこれを試してください:

RewriteCond %{THE_REQUEST} \ /archive\.php
RewriteRule ^ /404.html [F,L]

または、それについて空想したい場合:

RewriteCond %{THE_REQUEST} \ /archive\.php\?action=search&section=([^&\ ]+)
RewriteRule ^ /%1.html [R,L]
于 2013-10-18T16:32:29.223 に答える