Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用htaccess重定向动态URL,包括查询字符串_Php_.htaccess_Redirect_Silex - Fatal编程技术网

Php 使用htaccess重定向动态URL,包括查询字符串

Php 使用htaccess重定向动态URL,包括查询字符串,php,.htaccess,redirect,silex,Php,.htaccess,Redirect,Silex,我需要将一些URL从旧版本的网站重定向到新的URL。 我没有发现简单URL的问题,但我无法使带有QueryString的URL正常工作: Redirect 301 /product_detail.php?id=1 http://www.mysite.com/product/permalink 它只返回一个404,未找到 我还在Silex(我正在使用的PHP微框架)上尝试了一个路由,但它也不起作用: $app->get('/product_detail.php?id={id}', func

我需要将一些URL从旧版本的网站重定向到新的URL。 我没有发现简单URL的问题,但我无法使带有QueryString的URL正常工作:

Redirect 301 /product_detail.php?id=1 http://www.mysite.com/product/permalink
它只返回一个404,未找到

我还在Silex(我正在使用的PHP微框架)上尝试了一个路由,但它也不起作用:

$app->get('/product_detail.php?id={id}', function($id) use ($app) {

    $prodotto = Product::getPermalink($id);

    return $app->redirect($app['url_generator']->generate('product',array('permalink'=>$prodotto)));
});
使用htaccess规则有没有办法让查询字符串被视为url的一部分并正确重定向

多谢各位

重定向301/product_detail.php?id=1
http://www.mysite.com/product/permalink

Redirect
是一个mod_alias指令,不适合处理查询字符串:

mod_alias设计用于处理简单的URL操作任务。对于更复杂的任务,如操作查询字符串,请使用mod_rewrite提供的工具

摘自

因此,应该使用
mod_rewrite
。根目录中一个.htaccess文件中的相同示例如下所示:

Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^/product_detail\.php  [NC]
RewriteCond %{REQUEST_URI} !/product/permalink    [NC]
RewriteRule .*   /product/permalink       [R=301,NC,L]
它重定向

http://www.mysite.com/product_detail.php?id=1

致:

http://www.mysite.com/product/permalink?id=1

查询已自动附加到替换URL

对于内部映射,将[R=301,NC,L]替换为[NC,L]

重定向301/product_detail.php?id=1
http://www.mysite.com/product/permalink

Redirect
是一个mod_alias指令,不适合处理查询字符串:

mod_alias设计用于处理简单的URL操作任务。对于更复杂的任务,如操作查询字符串,请使用mod_rewrite提供的工具

摘自

因此,应该使用
mod_rewrite
。根目录中一个.htaccess文件中的相同示例如下所示:

Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^/product_detail\.php  [NC]
RewriteCond %{REQUEST_URI} !/product/permalink    [NC]
RewriteRule .*   /product/permalink       [R=301,NC,L]
它重定向

http://www.mysite.com/product_detail.php?id=1

致:

http://www.mysite.com/product/permalink?id=1

查询已自动附加到替换URL


对于内部映射,请将[R=301,NC,L]替换为[NC,L]

感谢您富有洞察力的回答!无论如何,我决定用PHP级别的重定向来解决我的问题,这使得我的.htaccess文件变成了一堵无法阅读的文本墙,因为我有几百个产品页面要重定向。谢谢你富有洞察力的回答!无论如何,我决定用PHP级别的重定向来解决我的问题,这使得我的.htaccess文件变成了一堵无法阅读的文本墙,因为我有几百个产品页面需要重定向。