2011-12-10 13 views
4

私は現在、私の個人的なプロジェクトのための非常に基本的なCMSを作り上げています。それは私の教育にとって何かと同じくらいです。私が持っている1つの質問は、どのように私はファイルの拡張子なしでurl/permalinksを達成するのかです。 DBからデータを取得する変数を取得することを理解していますが、www.url.com/?posttitle='blablablaの代わりにwww.url.com/posttitleなどに変換するにはどうすればよいですか。カスタムCMS、商用CMSのようなかなりパーマリンク。

また、若干異なるトピックでは、メンバーシップやメンバーリスト(craigslistなど)を扱うサイトを開発するためのフレームワークをEASYの方向で指摘できます。

私は現在WordPressで開発しており、かなり能力がありますが、OOPHPやカスタムCMSの開発は基本レベルからは慣れていません。

ご協力いただきありがとうございます。

+0

[PHPフレームワークでのURLのプレビュー](http://stackoverflow.com/questions/8440490/pretty-urls-in-php-frameworks) – mario

+0

[ //stackoverflow.com/questions/5142095/pretty-urls-for-web-application) – mario

答えて

9

あなたは(通常はのindex.phpスクリプトです)フロントコントローラにすべての要求を渡すようにの.htaccessファイルを使用すると思いますし、そのスクリプトは、データベース内のレコードへの着信要求と一致します。あなたが持っていた場合

は例えば、データベースのテーブルには4つの列でpagesと呼ばれる:idtitleslugcontent、次のようになります単純な実装...これはApacheに伝え

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.+)$ index.php/$1 [NC,L] 

すべての要求を取ることファイルまたは方向ではありません。index.phpに送信してください。次のように

あなたのindex.phpはその後になります:

<?php 
// Take request URI 
// Would be something like 'your-slug' 
$request = trim($_SERVER['REQUEST_URI'], '/'); 

// Set up database connection and attempt to match slug 
$sql = "SELECT * FROM pages WHERE slug = ? LIMIT 1"; 
$smt = $db->prepare($sql); 
$smt->execute(array($request)); 

$page = $smt->fetchObject(); 

if (! $page) { 
    // Page was not found matching slug 
    header('HTTP/1.1 404 Not Found'); 
    exit; 
} 

// Display matching page in a template 

ここから、あなたはそれに基づいて構築することができます。

2

これは、url rewriting(ウェブサイトのディレクトリ構造のルートに.htaccess内に置かれている)によって簡単に行うことができます。

たとえば、すべてをindex.phpに書き換えて、ここで解析することができます。

$_SERVER変数からURLのURI部分を取得するだけです(どのキーに何が含まれているかは「QUERY_STRING」またはvar_dump($_SERVER)を参照してください)。ここで

はすべてを書き換えるためのサンプルの.htaccessファイルです:

RewriteEngine on 
# rewrite everything except for assets to index.php 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule !\.(js|ico|gif|jpg|png|css)$ /index.php [L] 
2

ファイルレス拡張子は、通常はURLパスの抽象化の結果である - これが意味することは、アプリケーションが後にすべてのものを解釈すべきであるということですURLを入力し、それに基づいてデータを表示します。

は、次の点を考慮し、Apacheが/about-usと呼ばれるパブリックフォルダに奉仕しようとする(例えば、Apacheの上)通常のHTTPリクエストで

http://www.url.com/about-us

、それが指定されていないので、 static index.phpファイル。

CodeIgniter、CakePHP、Ruby on Railsなどの一般的なMVCフレームワークでは、/about-usはルートと呼ばれるものと一致し、そのページに関連するアセットをロードします。そのため、静的ページを読み込む代わりに、データベースに実行され、そのページのデータを取得し、テンプレートを取得し、動的にファイルを提供します。これは本質的に「きれいな」URLを取得する1つの方法です。

あなた自身をロールバックする場合は、上記のフレームワークのいずれかを強くお勧めします。しかし、それらを理解せずに使用するだけではありません。実行プロセスが何であるかを感じてみてください。各リクエストが正確に何をするのか把握してください。

認証が行われる限り、私はDeviseとCanCanのようなRailsにいくつかのオプションがあることを知っています。これらは基本的にあらかじめコード化された認証モジュールで、簡単に設定することができます。

関連する問題