2

実際のディレクトリにディレクトリ スラッシュを追加する方法は理解していますが、ユーザーが example.com/website/blog/entries ( /blog と /entries は両方とも仮想ディレクトリ) にアクセスしたときに、末尾のスラッシュを仮想ディレクトリに追加する必要があります。 )、URL アドレスは物理的に次のように変更されます: example.com/website/blog/entries/

これは、偽の/仮想ディレクトリをphpスクリプトのパラメーターに変換するために機能する、現在機能しているhtaccessコードです。

RewriteRule ^/?([a-zA-Z_\-/.]+)$ index.php?file=$1 [L,QSA]  

このRewriteRuleは、 example.com/website/blog/entries/ をexample.com/website/index.php?file=blog/entries/のように、ユーザーではなく PHP だけに見せます。

以下は、私が試みたが役に立たなかった書き換えルールの一部です。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .*[^/]$ %{REQUEST_URI}$1/ [L,R=301]

# -----------------------------------------------

RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^.+/$ %1 [R=301,L]

問題は、仮想ディレクトリをパラメーターに変換する現在の正規表現が「/」で始まるディレクトリ名を検索するためだと思います。そのため、サイトがルートフォルダー (「/」) にインストールされていない場合、または末尾のスラッシュは、完全に間違ったものにリダイレクトします。パスは常に変化するため、htaccess ファイルのどこにもフォルダー パスを書き込むことができません。たとえば、次のようなものは使用できません。

RewriteRule ^(.*)$ http://localhost:8888/project/$1/ [L,R=301]

仮想ディレクトリを PHP パラメータに変換するに、実際のディレクトリと仮想ディレクトリに末尾のスラッシュを強制する方法はありますか?

4

1 に答える 1

1

次のようなもので、必要なことを行う必要があります。

RewriteEngine On

# Put here the URL where .htaccess is located
RewriteBase /project/

# Redirect virtual URLs w/o trailing slash to URL with it
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*[^/])$ $1/ [R=301,QSA,L]

# pass virtual URLs into index.php as file argument
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?([a-zA-Z_\-/.]+)$ index.php?file=$1 [L,QSA]

ルールは構成に表示される順序で処理されるため、リダイレクトはデータを index.php に渡す前に行われます。

RewriteBaseURL のハードコードされた部分を使用しないバージョンは次のとおりです。

RewriteEngine On

# Redirect virtual URLs w/o trailing slash to URL with it
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.*[^/])$
RewriteRule .* %1/ [R=301,QSA,L]

# pass virtual URLs into index.php as file argument
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/?([a-zA-Z_\-/.]+)$
RewriteRule .* index.php?file=%1 [L,QSA]
于 2012-11-18T10:42:10.447 に答える