2009-06-10 10 views
10

.htaccessにアクセスすることができない場合、私は自分自身を創造的な困難に陥ります。 私にはmod_rewritingはありません。それにもかかわらず、私のような素敵なものを行うことができるようにしたい:mod_rewriteのないURL、.htaccessなし

http://www.example.com/Blog/2009/12/10/ 
http://www.example.com/Title_Of_This_Page 

私の選択肢は何ですか?答えに応えて

:私は

  • http://www.example.com/index.php/Blog/を.htaccessファイルへのアクセスを持っていないのphp5
  • で構築しています

    • が知られている技術であるが、私はそれを好みません。それは言うようにPHPを示しています。
    • 拡張子のないPHPファイルを作成するにはどうすればよいですか?これはトリックですか?
    • カスタム404テクニックを使用するとパフォーマンスが低下しますか? MultiViewsオプションが有効になっているか、あなたがそれを可能にするためのキーを保持している誰でも納得できる
  • +0

    どのWebサーバーですか?それとも、IIS上でPHPの拡張URLを取得する方法を尋ねていますか? –

    +0

    拡張機能のないPHPは同じ錯覚の権利を作成するでしょうか?一方、/ Blog/2009/12/10はうまくいかないでしょうか? – Kriem

    答えて

    11

    サーバーにカスタムエラードキュメントを設定する権限がある場合は、これを使用して404リクエストをリダイレクトできます。

    など。 Apache用(http://httpd.apache.org/docs/2.0/mod/core.html#errordocument

    ErrorDocument 404 /index.php 
    

    のindex.phpであなたは$ _SERVERの配列からのデータを使って、あなたの要求を進めることができます。

    +0

    ああ、私にそれを打つ。私はこれについて5分間考え、やっと同じことを思いついた。 –

    +0

    これがパフォーマンスにどのような影響を与えますか? – Kriem

    +10

    返されるドキュメントのHTTP 404ステータスは200ではありません。これにより、Webクローラで多くの問題が発生します。 – chaos

    0

    場合は、example.com/Blog/fooに要求を渡されますBlog.phpというスクリプトを作成し、$_SERVER['PATH_INFO']に「/ foo」を得ることができます。

    +2

    彼はできません。彼は.htaccessを編集する権利を持っていません。 – Jet

    +0

    ええ、私は今それを参照してください。編集済み – chaos

    3

    非常に簡単な方法はにある:

    • $_SERVERを使用してクエリを解析し、その交換した場合、それはどんな結果
    • に該当するかどうかを確認.htaccess
    • に404のErrorDocument(例えばPHP)を宣言ステータス200のHTTPステータス404はheader()を使用しており、index.phpを含む
    +1

    質問は、再び、それをどのようにするか.htaccessになります。いくつかのWebホストは、自分のconfigsにカスタム404を提供していますが、これは可能です。 – Piskvor

    +0

    私は、あなたの404 ErrorDocumentを選択(または編集)することができない、または要求レベルのレベルでこれを設定しなければならないため、.htaccessを使用することができない解決策はありません。 または、 like: 'index.php/Blog/...' –

    7

    のようなURLを持つこともできます
    http://domain.com/index.php/Blog/Hello_World 
    

    PHP5でそのままの状態。

    echo $_SERVER['PATH_INFO']; 
    

    アプリケーションで使用する前に、PATH_INFOと他のすべてのリクエスト変数を検証/フィルタすることを忘れないでください。

    +1

    私はこの手法を知っています。私はこの方法を使わない方法を求めて質問を変更しました。それにもかかわらず、あなたは正しいです。私はちょうどこれを好まない。 – Kriem

    2

    唯一の方法はカスタム404ページを使用することです。 WebサーバのMIMEタイプを再設定することなく、PHPインタプリタで拡張子のないファイルを解釈することはできません。しかし、あなたは.htaccessを編集することはできないと言っているので、他の方法はありません。

    3

    スラッシュを省略すると、少なくとも2つのサーバーにアクセスすると、拡張子にかかわらず、その名前に一致する最初のファイル(アルファベット順)が表示されます。

    私はあなたの問題を解決するためにこれをどのように使用するのか分かりませんが、ある時点で役に立つかもしれません。例えば

    http://www.somesite.com/abc.htmlhttp://www.somesite.com/abc.phpの両方が存在し、http://www.somesite.com/abcが要求された場合、http://www.somesite.com/abc.htmlが提供されます。

    +0

    Apacheの 'MultiViews'オプションを参照しています。このオプションは望ましくない副作用を伴います。 https://httpd.apache.org/docs/current/mod/mod_negotiation.html – Synox

    1

    定義したユーザーフレンドリーなURLを解析するURIクラスを記述できます。

    5

    あなただけのドメイン部分の後に疑問符を追加することによって、あなたが望むものに非常に近い取得することができます

    ...私はこの質問は非常に古いです知っているが、私は他の誰がこの可能な解決策を示唆して見ませんでしたURL、すなわち、

    http://www.example.com/?Blog/2009/12/10/ 
    http://www.example.com/?Title_Of_This_Page 
    

    上記の両方のHTTPリクエストは同じPHPスクリプトで処理されるようになりました。

    www.example.com/index.php 
    

    index.phpスクリプトで、上記2つのページのための$_SERVER['REQUEST_URI']それぞれあろう。

    Blog/2009/12/10/

    Title_Of_This_Page

    あなたが欲しいしかしあなたはそれらを処理することができます。

    +1

    非常に興味深い – emfi