.htaccess Mod Rewrite SEO URL和R=301

.htaccess Mod Rewrite SEO URL和R=301,.htaccess,mod-rewrite,redirect,.htaccess,Mod Rewrite,Redirect,我希望我的URL如下所示,并通知搜索引擎该URL已永久更改 www.example/shop/12/title 我通过以下方法实现了这一点 RewriteRule ^shop/([^/]*)/([^/]*)$ /shop.php?prod=$1 [L] RewriteRule ^shop/([^/]*)/([^/]*)$ /shop.php?prod=$1 [R=301,L] 但是,我被永久重定向URL卡住了 当我尝试以下方法时 RewriteRule ^shop/([^/]*)/([^/

我希望我的URL如下所示,并通知搜索引擎该URL已永久更改

www.example/shop/12/title
我通过以下方法实现了这一点

RewriteRule ^shop/([^/]*)/([^/]*)$ /shop.php?prod=$1 [L]
RewriteRule ^shop/([^/]*)/([^/]*)$ /shop.php?prod=$1 [R=301,L]
但是,我被永久重定向URL卡住了

当我尝试以下方法时

RewriteRule ^shop/([^/]*)/([^/]*)$ /shop.php?prod=$1 [L]
RewriteRule ^shop/([^/]*)/([^/]*)$ /shop.php?prod=$1 [R=301,L]
像www.example/shop/12/title这样的链接被重定向到www.example/shop.php?prod=12

这应该保持作为搜索引擎优化友好的链接


有什么帮助吗?

由于您的新URL包含的标题不在原始“丑陋”URL中,因此您无法从mod_rewrite中重定向。在mod_rewrite中不可能凭空调用信息

最好是在shop.php的顶部添加以下内容:

if( strpos( $_SERVER['REQUEST_URI'], "shop.php" ) !== FALSE ) {
  $id = $_GET['prod'];
  $title = getTitleById( $id );
  header( "Location: /shop/{$id}/{$title}", TRUE, 301 );
  exit();
}

所以旧的URL是:www.example/shop.php?prod=12,而新的URL是:像www.example/shop/12/title??您好,是的,这是正确的。那么规则无法帮助您,因为规则无法从数据库中提取标题。充其量,规则可以重定向到www.example/shop/12/No。链接实际起作用,链接由商店生成。因此,例如www.example/shop/12/large_shirt这样的链接调用URL www.example/shop.php?prod=12。它的R=301导致了一个内部错误。但是链接实际上是工作的,链接是由商店生成的。e、 g.www.example/shop/12/large_shirt调用URL www.example/shop.php?prod=12。是R=301导致了一个内部错误。您想将/shop.php?prod=12重定向到某个东西的/shop/12/title。这是不可能的,因为url中没有某个内容的标题。