无法更改PHP Switch Case URL

时间:2012-10-25 16:34:46

标签: php .htaccess url-rewriting switch-statement

这一直困扰着我。我的网站上有一些页面使用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>'; } ?>

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分: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很少做我想要他们做的事情(我自己的限制而不是正则表达式)。