5

小さな CMS をコーディングして、それらがどのように機能するかをよりよく理解し、PHP についていくつかの新しいことを学びます。しかし、私は問題に遭遇しました。

mod_rewrite を使用して (誰かがより良い解決策を持っている場合は試してみます)、きれいな URL を生成したいので、代わりに site.com/index.php?page=2 を site.com/tools にすることができます。

私の理解では、新しいページを追加するたびに.htaccessファイルを変更する必要があり、ここで問題が発生します.PHPは、アクセス許可がないため更新できないと言い続けます. ちょっとした chmod を実行すると、777 のアクセス許可があっても実行できないことがわかります。何か不足しているのでしょうか?

mod_rewrite 手順のソースは、重要/有用な場合に備えて、現在このページです。

4

2 に答える 2

10

1 つのアプローチは、処理スクリプトにすべてを書き直すことです。

RewriteEngine on
RewriteBase /

# only rewrite if the requested file doesn't exist
RewriteCond %{REQUEST_FILENAME} !-s 

# pass the rest of the request into index.php to handle     
RewriteRule ^(.*)$ /index.php/$1 [L]

http://yourserver/foo/bar/へのリクエストがある場合

実際に取得するのは、http://yourserver/index.php/foo/barへのリクエストです。index.phpをそのままにして、/foo/bar をどうするかを決定できます ($_SERVER['PATH_INFO'] を使用) - tom )

最初に .htaccess を変更するだけで済みます。存在しないファイルに対する今後のすべての要求は、PHP で処理できます。

mod_rewrite のドキュメントも役立つかもしれませんが、シンプルに保つか、あいまいなエラーを追跡するために多くの睡眠と髪を失う準備をしてください。

于 2008-11-05T17:23:10.600 に答える
2

あなたのPHPは、非常に明白な理由で変更できないはずです.htaccess。それがうまくいったとしても、それが賢明かどうかはわかりません。

mod_rewrite ルールに関して、より抽象的な設定を使用するのはどうですか? 使用する一般的な URL パターンを定義します。例えば:

/オブジェクト/アクション/ID

次に、HTTP リクエストを PHP ページに再ルーティングする一連のルールを記述します。これにより、どのページを実行するかが決定されます (たとえば、関連する PHP スクリプトを含めることによって)。

RewriteRule ^/(\w+)/?(\w+)?/?(\d+)?$ /index.php?object=$1&action=$2&id=$3 [nocase]

この方法では、頻繁に更新する必要がなく.htaccess、柔軟性があります。

于 2008-11-05T17:26:52.013 に答える