我知道在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已启用。
感谢您的帮助。
答案 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 Taylor和this 后,很明显人们必须在其他地方创建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。
希望有所帮助。