2

これをファイルに配置することにした場合:

IndexIgnore */*
RewriteEngine ON
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?page_request=$1 [QSA,L]

サイトは正常に動作します。と決めたmv index.php subdir/index.phpので、最後の行を次のように変更します。

RewriteRule ^(.*)$ /subdir/index.php?page_request=$1 [QSA,L]

そして、私が見るのはApacheディレクトリのリストだけです. 私は何を間違っていますか?これはおそらく非常に単純な解決策ですが、私のリソースでは何も見つかりませんでした。

私を悩ませているのは、これがうまくいくはずだということです。のファイルの場所を変更するだけでよいと考えるのは直感的で自然なことですindex.php

編集

と を試しましRewriteBaseRewriteCond %{REQUEST_URI} !/subdir/index.php。どちらも機能していません。

4

5 に答える 5

2

書き換えログを有効にしてみましたか? これを仮想ホストに追加してみてください:

RewriteLogLevel 3
RewriteLog "/usr/local/var/apache/logs/rewrite.log"

あなたが投稿したルールは私にとってはうまくいくようです...

編集:

OK、私は自分の Mac で問題を再現できたので、これが必要であることがわかりました。

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ subdir/index.php?page_request=$1 [QSA,L]

RewriteCond %{REQUEST_URI} /
RewriteRule ^(.*)$ subdir/index.php?page_request=$1 [QSA,L]

問題は、行くだけでhttp://localhost/ %{REQUEST_FILENAME}は値がないことです。これらのルールを 1 つにまとめる方法があるかもしれませんが、まだわかりません。

編集2:

私はちょうどこれを試してみましたが、それもうまくいきました:

DirectoryIndex subdir/index.php

RewriteEngine On   
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ subdir/index.php?page_request=$1 [QSA,L]

ただし、page_request$_GET変数の値は何もないため、コードでそのケースを処理する必要があります。

これが機能するのは、現在のディレクトリではなくサブディレクトリでインデックス ページを探すように Apache に指示しているためです。

于 2012-06-13T00:09:14.623 に答える
0

スラッシュを削除してみてください..

RewriteRule ^(.*)$ subdir/index.php?page_request=$1 [QSA,L]
于 2012-06-12T14:40:37.513 に答える
0
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !/subdir/index.php 
RewriteRule (.*) /subdir/index.php?page_request=$1 [QSA,L]
于 2012-06-12T18:35:11.060 に答える
0

RewriteRule ^(.*)$ ./subdir/index.php?page_request=$1 [QSA,L]

于 2012-06-12T15:03:15.533 に答える
-1

これを使って:

 RewriteRule ^(.*)$ subdir/index.php?page_request=$1 [QSA,L]
于 2012-06-12T14:40:33.193 に答える