将动态转换为seo友好的URL

时间:2014-05-16 19:18:34

标签: apache .htaccess mod-rewrite

我知道在SO和其他地方有很多关于这个问题,我现在已经阅读了所有内容,但我似乎并没有让它全部工作,尽管整天都在冒汗。

所以,看看你们是否能指出我正确的方向。

我有一个动态创建的URL(由客户在index.php中选择一个表单),看起来像一个实例:

http://www.example.com/marques.php?brand_id=39-Ford

我需要它向用户和搜索引擎显示为:

www.example.com/marques/Ford

我已按如下方式设置.htaccess:

...other .htaccess stuff..
RewriteEngine on
RewriteCond %{REQUEST_URI} ^\/marques #here, I believe, to apply this only when URI is /marques
RewriteRule /([A-Z][a-z]+$)/ marques/$1  [L] #here I meant to get 'Ford' in this instance.

我计划拥有目标文件,marques.php使用给定的品牌信息处理请求。

这根本不起作用。我继续看到“旧”网址。

当然,下一步是当客户点击搜索引擎上的“友好”链接时(希望很快),可以进行.htaccess重定向。但我需要迈出第一步才能解决。

顺便说一句,我检查了我的提供商并确认mod_rewrite已启用。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

你可以使用你的根.htaccess:

RewriteEngine On

RewriteCond %{THE_REQUEST} \s/+marques\.php\?brand_id=([^\s&]+) [NC]
RewriteRule ^ /marques/%1? [R=301,L]

RewriteRule ^marques/([^/.]+)/?$ marques.php?brand_id=$1 [L,QSA,NC]

答案 1 :(得分:0)

经过进一步调查后,我意识到我因为这种普遍的误解而陷入困境,即人们​​可以使用mod_rewrite来创建SEO友好的URL。不幸的是,这种误解在整个SO中都得到了加强。

在阅读this article from Matthew James Taylorthis 后,很明显人们必须在其他地方创建SEO友好网址,而不是通过mod_rewrite创建,就像我的想法一样。

Mod_rewrite只是整个过程的一部分。

如果只有一个锚标签的链接,则必须进入网站的每个页面并将更改硬编码到SEO友好URL。就我而言,URL是动态创建的。

可能有其他解决方案,但这样做了。

所以,首先我改变了我的形式:

<form action="marques.php " method="post" class="form1" >
<select class="select_home" name="brand_id" onchange="form.submit()" >
<option value= "<?php echo $row['brand_id']; ?>">"<?php echo $row['brand']; ?>"</option>

对于这个新的设置:

 <form action=" " method="post" class="form1" >
 <select class="select_home" name="brand" onchange="form.submit()" >
 <option value= "<?php echo $row['brand']; ?>">"<?php echo $row['brand']; ?>"</option>

我上面所做的是通过放置action =“”并将名称和值更改为'品牌'即将品牌名称提交到页面本身,即品牌名称而不是brand_id。最后一个意味着URL'真的'友好。可以决定在URL中同时具有名称和ID。

SEO友好URL在序列中“创建”。

这个脚本放在同一页面的最顶层,然后是其他任何内容,否则“标题”将不起作用。

if(isset($_POST['brand'])){
$brand = $_POST['brand'];
$brand = str_replace(" ", "-", $brand);
$url = '/marques-voiture/' . $brand;
header("Location:" .$url );
exit();
}

因此,在上面创建了SEO友好URL并将在浏览器中显示:

www.example.com/marques/Ford or www.example.com/Land-Rover

接下来,现在是的,使用mod_rewrite告诉浏览器如何理解该URL并获取正确的脚本:

www.example.com/marques.php?brand=Ford

我在.htaccess中做了如下:

RewriteEngine on
RewriteCond %{REQUEST_URI} ^/?marques-voiture [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ([\-A-Za-z]+$) /marques.php?brand=$1 [L]

当然有必要更改目标脚本以接收GET,而不是现在包含品牌的POST,而不是像以前那样包含brand_id。

希望有所帮助。