1

私の問題の背景を少し説明します。PHP CMS の静的な HTML5/CSS3 プロトタイプに取り組んでいます。私が望んでいることの 1 つは、クリーンな URL を使用することです。私は最初に次のようなものを持っていました:

localhost:8888/file.php

そしてそれがしたかった:

localhost:8888/fileまたはトレイルスラッシュなしlocalhost:8888/file

Stackoverflow で簡単な検索を行ったところ、この問題に関するいくつかの結果が見つかりました。親切にもこれを使用して仕事をしました。

RewriteEngine On

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.*?)/?$
RewriteCond %{DOCUMENT_ROOT}/%1.php -f
RewriteRule ^(.*?)/?$ $1.php
RewriteRule ^(.*?)/?$ $1.php

このアプローチの問題は、サイト/投稿など、CMS 構造に深いレベルを設定したい場合です。mod_rewrite がなければ、../images/ から ../../images/ などのように機能させるために、フォルダーを作成し、コードに大幅な変更を加える必要があるため、そのソリューションにブーイングします。それを機能させるには mod_rewrite を使用する必要があります。

さらに、そのコードの mod_rewrite チャンクはフォルダーのものでも機能しないため、ここで検索を開始して解決策を見つけたので/level1_level2_levelx.php/level1/level2/level3/または/level1/level2/level3. 私は多くの方法で検索しましたが、これに対する正しい答えが見つかりません。

皆さん、ありがとうございました、

PD: MAMP を使用しています。

4

1 に答える 1

0

書き直しの面では、次のことがあなたが求めることをするはずだと私は推測しています:

入力したURLを内部的に書き換えます。

  http://localhost:8888/file  
  OR:
  http://localhost:8888/file/  

に:

  http://localhost:8888/file.php

ルール:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !\.php$
RewriteCond %{REQUEST_FILENAME} ^(.*)/?$
RewriteCond %1\.php             -f
RewriteRule ^(.*)/?$  $1.php  [L]

しかし、Apacheで構成されたカスタム404ハンドラーが本当に必要なように聞こえます。

<FilesMatch "\.(css|js|jpg|png|gif)$">
    ErrorDocument 404 "File not found."
</FilesMatch>

<Files favicon.ico>
    ErrorDocument 404 "-"
</Files>

ErrorDocument 404 /404-handler-script.php

また、関連する404-handler-script.phpを追加して、内部で必要なマッピングを実行します。

http://www.phpriot.com/articles/search-engine-urls/4

注:このスクリプトは、ブラウザー自体を提供するのではなく、ブラウザーを宛先スクリプトにリダイレクトします。

于 2012-11-23T11:25:33.643 に答える