2017-06-18 8 views
2

.htaccessリダイレクトに関する既存の回答を大量にチェックしました。しかし、それらのどれも私を助けてくれませんでした。パスを含めないすべてのURLをサブディレクトリのファイルにリダイレクト

私が達成したいのは、すべてのリクエストURLを/api/init.phpにリダイレクトすることです。しかし、これまで私のインデックスページwww.example.comは、ファイルが見つからないためにファイルリストを提供していましたが、パスを含むすべてのURLリクエストが機能しています。

.htaccessでこれを達成するには、リンク先ページにディレクトリのリストを表示する必要がありますか?

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /api/init.php?path=$1 [NC,L,QSA] 

答えて

2

はまあ、あなたのサイトのルートディレクトリがあるので、あなたが持っているこのルールは除外ディレクトリを既存:

これは私が得た限りです。あなたができることは、既存のファイルを除外し、既存のディレクトリをPHPスクリプトが処理できるようにすることだけです。このように:

RewriteEngine on 
RewriteCond %{REQUEST_URI} !=/api/init.php 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ /api/init.php?path=$1 [L,QSA] 

私はNCフラグを不要にして削除しました。不要なファイルシステムのチェックを防止するための条件を追加しました。

PHPの$_SERVER['REQUEST_URI'](mod_rewriteのREQUEST_URIと同じではなく、常に元のURIを持ちます)から取得できるので、URLパラメータでパスを渡す必要はありません。

RewriteEngine on 
RewriteCond %{REQUEST_URI} !=/api/init.php 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule^/api/init.php [L] 

クエリ文字列だけで(そうQSAが必要とされていない)影響を受けずに渡されますので:あなたは、あなたのルールがいいと簡単になることをしたいと思った場合。

+1

"不要な反復を防ぐ" - むしろ_不必要なファイルシステムcheck_。良い答え+1 – MrWhite

+0

@ user82217はい、合意した、それを変更しました。あなたがそれを好きで嬉しい:) – SuperDuperApps

+1

これは素晴らしい:)とも 'NC'フラグについてのヒントのおかげで – PhyCoMath

関連する問題