3

参考までに、次の.htaccessファイルを使用しています。www.site.com/content/

ユーザーがwww.site.com/content/loginにアクセスしたときに、 www.site.com / content / userlogin.phpのコンテンツを表示したい(リダイレクトではなく、書き換えによってマスクされた)-これは次のように正常に実行されました。

RewriteEngine On
RewriteBase /content/
RewriteRule ^login/?$ /content/userlogin.php [NC,L]


ただし、次のことを追加したいと思います。www.site.com/ content / userlogin.phpに直接アクセスしようとすると、www.site.com / content / error/404の404ページにリダイレクトされるようにします。.php

RewriteEngine On
RewriteBase /content/
RewriteRule ^login/?$ /content/userlogin.php [NC,S=1,L]
RewriteRule ^userlogin\.php$ /content/error/404.php [NC,L]


これを.htaccessファイルに含めると、www.site.com / content/ loginとwww.site.com/content/userlogin.phpの両方にwww.site.com/content/error/404.phpが表示されます。

4

2 に答える 2

2

まず、L ディレクティブがそれ以上の書き換えを停止するため、S=1 は機能しません。最初の RewriteRule によって Apache がもう一度 .htaccess ルールを通過するように見えるので、最初の書き換えが行われたかどうかを知る必要があります。これを行うには、次のように環境変数を設定します。

RewriteRule ^login/?$ /content/userlogin.php [E=DONE:true,NC,L]

したがって、次のリダイレクトが発生すると、環境変数が実際に書き換えられ、次のREDIRECT_<variable>ように RewriteCond を実行できます。

RewriteCond %{ENV:REDIRECT_DONE} !true
RewriteRule ^userlogin\.php$ /content/error/404.php [NC,L]

お役に立てれば

于 2012-03-28T22:18:39.767 に答える
0

代わりにコードで変数を使用%{THE_REQUEST}します。

RewriteEngine On
RewriteBase /content/

RewriteRule ^login/?$ content/userlogin.php [NC,L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+userlogin\.php[\s\?] [NC]
RewriteRule ^ content/error/404.php [L]
于 2012-03-28T22:25:31.313 に答える