0

私はこれをいくつかの方法で試しましたが、ここで多くの例と質問を読みましたが、それがまったくできないかどうかはまだわかりません。
私が望むのは、特定の URL 形式を使用して特定のファイルと機能へのアクセスを強制し、他のすべて (既存のファイル/ディレクトリであっても) へのアクセス (偽の 404) を拒否することです。

この部分は機能します:

RewriteEngine On

RewriteRule ^([\w]+)$ /somefolder/index.php?page=$1 [L]
RewriteRule ^person/([\d]+) /somefolder/index.php?page=person&id=$1 [NC,L]
RewriteRule ^css/([\w]+\.css) /somefolder/css/$1 [NC,L]
RewriteRule ^images/([\d]{4}-[\d]{2}-[\d]{2}/[\d]+\.(gif|jpe?g)) /somefolder/images/$1 [NC,L]

ただし、次の行では 500 内部サーバー エラーが発生します。

RewriteRule ^(.*)$ /somefolder/index.php?page=error [R=404]

訪問者が /somefolder/index.php (または、存在する場合も存在しない場合もあるその他のファイル/ディレクトリ) を要求した場合、404 とエラー ページを返す必要があります。これも後で追加する予定です。

ErrorDocument 404 /somefolder/index.php?page=error

.htaccess ファイルはルートにあります。これはまったく実行可能ですか?

例:

(ユーザーがアクセスし、他のページからリンクされているページ)
http://example.com/breakfast -> http://example.com/somefolder/index.php?page=breakfast
(ページで使用されるスタイルシート)
http:/ /example.com/css/default.css -> http://example.com/somefolder/css/default.css
(ドキュメントで使用されている画像)
http://example.com/images/2011-01-01/ test.jpg -> http://example.com/somefolder/images/2011-01-01/test.jpg
(その他すべて)
http://example.com/this/may.exist -> 404 + エラー ページ

.. これは、誰かがhttp://example.com/somefolder/css/default.css (存在する) を取得しようとしても、それを受け取らないことを意味します。

4

1 に答える 1

1

これは私が望んでいたことです。すべての php ファイルへの直接アクセスを拒否しますが、ショートカットを介して実行できます。

ErrorDocument 403 /index.php?page=error
ErrorDocument 404 /index.php?page=error

RewriteEngine On
RewriteRule ^$ /index.php?page=start [L]
RewriteRule ^([\w]+)$ /index.php?page=$1 [L]

<Files ".ht*">
    Order Allow,Deny
</Files>

<Files "*.php">
    Order Deny,Allow
    Deny from All
    Allow from env=REDIRECT_STATUS
</Files>

(私が思うに) 無限ループが作成されるため、これにより 500 エラーが発生します。書き換えが発生するたびに、htaccess ファイルがもう一度処理されます。

RewriteRule ^(.*)$ /somefolder/index.php?page=error [R=404]
于 2013-07-18T09:09:57.327 に答える