2009-06-12 8 views
11

私はかなりのURLを作るためにmod_rewriteを使いたいですが、サーバ上のどのユーザにも使える.htaccessファイルの単一のバージョンを持っています。mod_rewriteを使って.htaccessから現在のディレクトリを参照するには?

これまでのところ、私は、標準かなりURLの.htaccessファイルを持っている:

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

理想的には、私は、この文書は、私がしたいことはないと信じているように私につながる

RewriteRule ^(.*)$  %{URL of this file's directory}/index.php/$1 [L] 

に似た何かをしたいと思います必要:

注:ディレクトリ単位のパターン一致text パターンがサーバーごとの構成ファイルの完全なURLに適用されることを決して忘れないでください。ただし、ディレクトリ単位の構成ファイルでは、ディレクトリごとの接頭辞(特定のディレクトリでは常に同じ)はパターンマッチングのために自動的に削除され、置換が行われた後で自動的に追加されます。この機能は、多くの種類の書き換えには不可欠です。これがなければ、いつも可能ではない親ディレクトリに常に一致させる必要があります。

は、私はまだ私がするRewriteRule上のindex.phpの前に/大手置くかどうか、しかし、間違った結果を取得します。

この、

http://server/test/stream/stream

はない

http://server/test/index.php/stream

の.htaccessファイルは/試験/にある

http://server/index.php/stream

になります。

+0

またhttps://stackoverflow.com/q/4704508/632951 – Pacerier

答えて

2

index.phpの先頭/前を置くかどうかは問題になります。それをオフにすることによって、スクリプトは正しく動作します。リダイレクトで物理ディレクトリを使用していたRフラグを使ってテストしていました。

+0

はい、**しかし** [それを残すことによって、あなたはに依存していますvalue of rewritebase](https://stackoverflow.com/a/11443194/632951)**はあなたのhtaccessの親フォルダではありません**。いずれにせよ、それを放置しておくのは、真の解決策ではないハックな解決策です。 – Pacerier

8

私は同様の問題を持つ、単に「/」ルートをオフに残していることがわかったは次のようにURLを提供する私のテストWebサーバ(WindowsのXAMPP)の結果:

http://localhost/C:/xampp/htdocs/sites/test/

完全ではありません。私の解決策は、REQUEST_URIからパスを抽出するためにRewriteCondを使用することです。

RewriteCond %{REQUEST_URI} ^(.*)/index.php$ 
RewriteRule index.php %1/ [r=301,L] 

注:「%1 /」でパーセント記号ではなく、ドル記号ここではURLの末尾から不要な「index.phpの」Sを除去する例を示します。

%1〜%9は、最後に一致したRewriteCondのパターンを取得します。$ 1- $ 9は、RewriteRuleからパターンを取得します。

参照: http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritecond

乾杯:)

関連する問題