2

私のウェブサイトにはサブディレクトリがあります:

http://www.mysite.com/test/

私が持っている「テスト」ディレクトリ内:

index.php
included-inside-index-file.php
another-included-inside-index-file.php
script.php

さて、どうすればURLを.htaccessで書き換えて、次のように機能させることができますか?

http://www.mysite.com/test --> access index.php
http://www.mysite.com/test/beautiful-url --> access script.php?parameter=beautiful-url
http://www.mysite.com/test/included-inside-index-file.php --> 404 error
http://www.mysite.com/test/another-included-inside-index-file.php --> 404 error
4

1 に答える 1

2

これは非常に簡単です。の一般的なルールが必要ですが、その前に、非表示にするスクリプトbeautiful-urlをスローするルールがあります。[R=404,L]

RewriteEngine On

# First hide the includes
# These could be simplified if they follow a pattern.
# Here we'll list them individually though.
RewriteRule ^test/included-inside-index-file\.php - [R=404,L]
RewriteRule ^test/another-included-inside-index-file\.php - [R=404,L]

# Then rewrite to the beautiful URL if the file doesn't exist.
# The index.php will serve normally because it does exist
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^test/(.+)$ test/script.php?parameter=$1 [L]

への直接アクセスを明示的にブロックする場合script.phpは、内で一致させることができますTHE_REQUEST。インクルードへのアクセスをブロックするルールの後にこれを配置します。これでうまくいくと思います。を使用せずに実行しようとするとRewriteCond、美しいURL書き換えから404が取得されます。

RewriteCond %{THE_REQUEST} script\.php
RewriteRule ^. - [R=404,L]
于 2013-01-24T18:01:39.893 に答える