这一直困扰着我。我的网站上有一些页面使用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>'; } ?>
答案 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很少做我想要他们做的事情(我自己的限制而不是正则表达式)。