1

私は検索し、検索し、うまくいかなかった多くのことを試しました...それは私を超えています。私は少なくとも50のことを試しましたが、運がありません..誰か助けてください!

最初に、「post」というページに変数を渡すリンクがあるフォルダ /blog 内にファイル「index.php」ページがあります。「post.php」ページの MySQL は、一致する行から MySQL データを取得します。特定の投稿を識別して表示します。

私がやろうとしているのは、よりクリーンで SEO フレンドリーな URL を作成することです...

例: 「www.mydomain.com/blog/index.php」ページで、「post?title=This%20is%20a%20test%20title%20for%20the%20blog%20post...&id」のようなリンクをクリックします。 =1" にすると、"/blog/" の "index.php" ページと同じディレクトリにある "post.php" ページに移動します。

私が見つけたすべてのhtaccessリライトは、URLをより使いやすいバージョンにまったく変更していません..すべてが同じままになります..

誰か助けてください。上記のように表示するのではなく、www.mydomain.com/blog/title として表示したいのですが! 誰かがスペースの投稿タイトルに表示される「%」を削除して「-」に置き換えるのを手伝ってくれたら、それも本当に素晴らしいでしょう..

::必死::ありがとう、アダム

現在、「blog/」ディレクトリにある htaccess ファイルでこれを使用しています。

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=301,NC,L]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [L]
RewriteEngine On
RewriteCond %{HTTP_HOST} ^mydomain.com/blog/$ [NC]
RewriteRule ^(.*)$ http://www.mydomain.com/blog/$1 [R=301,L]
RewriteEngine On
RewriteRule ^([^/]*)/([^/]*)$ /post?title=$1&id=$2 [QSA,L]
4

1 に答える 1

0

htaccess ファイルに大きな混乱が生じました。その多くは、あなた自身に余分な混乱を引き起こしているだけです. 新鮮なスタート。

/.htaccess

ルートに htaccess ファイルがある場合は、/blog/.htaccess のルールと競合するルールがそこにないことを確認してください。

/blog/.htaccess

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

## this makes /blog/whatever-whatever  actually execute /blog/post.php?title=whatever-whatever but only if the file doesn't physically exist
RewriteCond %{DOCUMENT_ROOT}/blog/$1 !-f
RewriteRule ^blog/(.*)$     /blog/post\.php?title=$1   [QSA,L]

/blog/index.php

<?php
$post_title = 'Whatever Whatever';
$post_slug = strtolower(str_replace(' ', '-', $post_title)); // replace spaces with hyphens and lower case everything
echo '<a href="/blog/'.$post_slug.'">'.$post_title.'</a>';
?>

/blog/post.php

<?php
$post_slug = $_GET['title'];

// connect to db.
// construct an SQL query such that your WHERE will have a comparison against your field but that has spaces replaced with hyphens
// for example in mysql it would be something like this
$sql = "SELECT * FROM `your_post_table` WHERE REPLACE(`your_post_title_field_column`, ' ', '--') = '".mysqli_escape_string($post_slug)."'";
// (which by the way is very crude and poses some security risks)
// learn about sql injection at http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php

// then you execute your sql query get your result and proceed as needed...
if (!empty($result)) {
    echo '<h1>'.$result['post_title'].'</h1>';
}
于 2012-10-25T18:37:52.430 に答える