0

次のワークフローを検討してください。

ユーザーがリクエストを行うwebsite.com/lolmyblogpost

私の.htaccessはすべて...

RewriteCond %{REQUEST_URI} !=/index.php
RewriteRule .* /index.php

index.php のどこで、lolmyblogpost.html返されるテンプレートのファイル ツリーを検索します。

/path/to/lolmyblogpost.html

したがって、私のマスター テンプレートでは次のことができます。

{include file="{$pathToTemplate}"}

ディレクトリ ツリーでファイルを検索し、ファイル パスを返すにはどうすればよいですか?

4

1 に答える 1

1

本当に必要なのは、デフォルトのタイプでの「振り返り」のサポートです。次のように Apache 仮想ホスト (何か) をセットアップします。

<VirtualHost *:80>
    ServerName  example.com:80
    ServerAlias www.example.com
    DocumentRoot    "/path/to/root/dir"
    AddDefaultCharset UTF-8
    ErrorDocument 403 "/403.php"
    ErrorDocument 404 "/404.php"
    <Directory /path/to/root/dir>
            Options Indexes FollowSymLinks
            DefaultType application/x-httpd-php
            AllowOverride All
            Order deny,allow
            Allow from all
            AddOutputFilterByType DEFLATE application/javascript text/css text/html text/plain text/xml
            RewriteEngine On
            RewriteBase /
            RewriteCond %{REQUEST_FILENAME} !.index.ph.*
            RewriteRule ^(.*)$  /index.php
    </Directory>
</VirtualHost>

重要な行は です。これは、ファイル拡張子DefaultType application/x-httpd-phpを取り除くことができることを意味します。.php

http://example.com/this_is_a_php_pageのような URL を使用できるようになりhttp://example.com/this_is_a_php_page/with_a_path_info_varました。

したがって、on this_is_a_php_page(実際には拡張子のない .php ファイル) を使用$_SERVER['PATH_INFO']して、URI で渡される および vars をチェックできます。

編集:RewriteEngineすべてを にプッシュする and ルールを 追加しましたindex.php。これは、呼び出されたサーバー上に (実際の) 単一のページがあり、実際に要求されたものについて varindex.phpをチェックする必要があることを意味します。$_SERVER['REDIRECT_URL']

たとえば、 へのリクエストはに渡されてhttp://example.com/a_pageロードされるようになりました。注: このソリューションは、すべてを index.php にプッシュします。次のような例外を含める必要があります。index.phpa_page$_SERVER['REDIRECT_URL']

 RewriteCond %{REQUEST_FILENAME} !.not_me_plz.*

files で始まるすべてのファイルをnot_me_plz「期待どおり」に提供できるようにします。

于 2013-01-06T05:14:09.557 に答える