web-dev-qa-db-ja.com

ApacheでのURL書き換えによるスクリプト拡張機能の削除

(わずかに理論的な)物理ディスクレイアウトが次の場合:

\products\cameras\50d.jpg 
\products\cameras\20d.jpg 
\products\lenses\18-55.jpg 
\products\lenses\28-135.jpg 
\products.php 

現時点では、次の形式のURLを持っています。

/products.php /
/ products.php/cameras /
/ products.php/cameras/50d 

Products.phpでPATH_INFOを使用して、表示するものを決定します。

URLを書き換えて.phpを削除するのに苦労していますが、それでも静的リソースを取得できるようにしていますか?

2
Rowland Shaw

これが機能することが判明し、依然として内部のリソースが機能することを許可します。

RewriteRule ^products([^\.]+)$ products.php$1
0
Rowland Shaw

まず、これらのバックスラッシュはすべてスラッシュでなければなりません。 \は、フォルダーの分離ではなく、特殊文字を「エスケープ」するために使用されます。

既に製品フォルダがある場合、products.phpproductsに書き換えることはできません。すべての画像を/images/cameras/50d.jpgなどの別のディレクトリに移動することをお勧めします。次に、これを行うことができます:

RewriteRule ^products products.php

それを使用して、変数を見つけるためにPHPで要求されたURLを解析する必要があります。これも使用できます:

RewriteRule ^products/([^/]+) products.php?cat=$1
RewriteRule ^products/([^/]+)/([^/]+) products.php?cat=$1&prod=$2

PHPスクリプトでは、$_GET['cat']および$_GET['prod']を介して必要な変数が自動的に取得されます。

編集:実際、あなたは正しいです。すべての画像が特定の拡張子に制限されている限り、両方を持つことが可能ですis。私はこれがうまくいくと思う:

RewriteRule ^products/(.+).jpg products/$1.jpg [L]
RewriteRule ^products/([^/]+) products.php?cat=$1
RewriteRule ^products/([^/]+)/([^/]+) products.php?cat=$1&prod=$2
2
DisgruntledGoat