1

これはしばらくの間私を悩ませてきました。私のウェブサイトには、PHP スイッチ ケースを使用してページのコンテンツを変更するページがいくつかあります。私が抱えている問題は、これらのページの URL が SEO にあまり適していないことです。

これを変更したい:

http://www.abcprintingink.com/printing.php?page=print-and-mail

これに:

http://www.abcprintingink.com/printing.php/print-and-mailまたはそれ以上

http://www.abcprintingink.com/printing/print-and-mail

.htaccess を試しましたが、何も機能しません。これが私が.htaccessで試したことです:

RewriteEngine On
#RewriteRule ^web.php/([^-]*)$ /web.php?page=$1 [QSA]

#RewriteRule ^/web.php/?page\=(.*)$ /web.php?page=$1 [l]

RewriteRule ^web.php/(.*)$ /web.php?page=$1 [l]

RewriteRule ^web.php/([a-zA-Z0-9\-/\.]+)/?$ web.php?page=$1 [L]

.htaccess の他のコマンドは機能するので、ファイルや Web サーバーではないことがわかります。

これは、printing.php の switch ステートメントです。

<?php
        /* SEO Switch Statements */
        $pagename = "printing";
        $page = htmlspecialchars($_GET["page"]);

        switch ($page) {
case 'print-and-mail':
                $page_title = 'page title';
                $page_description = 'page desc';
                $page_nav_active = 'print-and-mail';
                $page_content_copy = 'page text';
                $template_slider_image = 'image';
                break;
}
?>

また、これはページをリンクするメニューの背後にあるスクリプトです。

    <?php $menu=count($navigation); for ($i=0; $i<$menu; $i++) 
{ echo '<div><li class="navigation"><a href="?page='.$navigation[$i].'">'
.$replaced = str_replace("-", " ", $navigation[$i]).'</a></li></div>'; } ?>
4

2 に答える 2

1
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+) - [PT,L]

## 301 redirect, http://www.abcprintingink.com/printing.php?page=print-and-mail
## to http://www.abcprintingink.com/printing/print-and-mail
RewriteCond %{QUERY_STRING} ^page=(.*)$
RewriteRule ^printing\.php$ /printing/%1? [R=301,L]

## makes /printing/print-and-mail actually work
RewriteRule ^printing/(.*)$ /printing\.php?page=$1 [L,QSA]
于 2012-10-25T16:50:49.453 に答える
0

試すことができる1つの可能性は、すべての情報をindex.phpなどのコアファイルに送信し、それらから正しいデータを提供することです。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

index.phpのURLを解析してから、includeステートメントを介してデータを取り込み、$ _ GET配列にデータを入力するか、テンプレートを呼び出してデータベースから変数を入力します。

これは私がそれを行う方法です-おそらく正規表現を正しくするために何週間も費やした後です。主な理由は、正規表現とhtaccessが、私が望んでいることをほとんど実行しないためです(regexの制限ではなく、私自身の制限)。

于 2012-10-25T16:48:38.207 に答える