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 中的其他命令有效,所以我知道它不是文件或网络服务器。

这是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

您可以尝试的一种可能性是将所有信息发送到诸如 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 很少做我想让他们做的事情(我自己的限制而不是正则表达式的限制)。

于 2012-10-25T16:48:38.207 回答