2

Web サイト用に小さなカスタム MVC フレームワークを開発しました。これは index.php チェック $_POST['page'] & $_POST['subpage'] であり、指定されたパラメーターに関連する php ファイルが含まれています。

例: index.php?page=foods (これには view/foods.php が含まれます)

例: index.php?page=foods&subpage=pizza (これには view/foods/pizza.php が含まれます)

ここで、.htaccess を使用して URL をクリーンアップしたいと考えています。2番目のパラメーターを渡す方法をいくつか試しました。しかし、私は失敗しました。これはうまくいきます...

RewriteEngine on
RewriteRule ^([^/\.]+)?$ index.php?page=$1 [L]

しかし、2番目のパラメーターを渡そうとすると、うまく機能しません。これは css/js/iamges パスを変更します。

RewriteEngine on
RewriteRule ^([^/\.]+)?$ index.php?page=$1

RewriteRule ^([^/\.]+)/([^/\.]+)?$ index.php?page=$1&sub=$2
4

3 に答える 3

2

QSA (Query String Apend) フラグを使用すると、リクエスト文字列全体をインデックス ファイルに渡すことができます。

QSA - 元のリクエスト URL の任意のクエリ文字列を、書き換えターゲットで作成された任意のクエリ文字列に追加します

したがって、ルールは次のようになります-

RewriteRule %{REQUEST_FILENAME} !-d
RewriteRule %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php?uri=$1 [QSA,L]

インデックスファイルでは.explode()、スラッシュでできます-

$splitArr = explode('/',$_GET['uri']);

および/または組み込みparse_url()関数を使用する - http://www.php.net/manual/en/function.parse-url.php

parse_url— URL を解析し、そのコンポーネントを返します

于 2012-07-23T17:12:20.230 に答える
2

このタイプのほとんどの URL リライターは、実際に存在するファイル/ディレクトリを明示的に除外します。

RewriteRule %{REQUEST_FILENAME} !-d
RewriteRule %{REQUEST_FILENAME} !-f
于 2012-07-23T17:14:56.383 に答える
0
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteRule ^public/(js|css|images)(/.*|$) - [L]
RewriteRule ^(.+)$ index.php?page=$1 [QSA,L]

これが私が最終的にやった方法です!!!

于 2012-07-23T20:13:33.990 に答える