简单的htaccess重写规则错误404

时间:2016-05-18 10:23:45

标签: php apache .htaccess mod-rewrite

我试图设置一个简单的htaccess规则,但是没有用。
我认为问题出在?=个字符上?

代码是:

Options +FollowSymLinks 
ErrorDocument 404 /php/404redirect.php
RewriteEngine on
RewriteRule ^productos.php?id=([0-9]+)$ /?view=productos&id=$1 [L,NE,B,QSA]

这总是给我错误404.

我想要的是重定向所有请求:
www.example.com/productos.php?id=X

www.example.com/?view=productos&id=X

2 个答案:

答案 0 :(得分:3)

Querystring不是RewriteRule指令中匹配的一部分,要重定向查询字符串,您需要使用RewriteCond以下选项之一:

选项1

RewriteEngine on

RewriteCond %{THE_REQUEST} /product\.php\?id=([^&\s] [NC]
RewriteRule ^ /?view-product&id=%1? [NC,L,R]

选项2

RewriteEngine on

RewriteCond %{QUERY_STRING} ^id=([^&]+)$ [NC]
RewriteRule ^product\.php$ /?view-product&id=%1? [NC,L,R]

我们在目标网址末尾使用空白问号来丢弃旧的查询字符串,否则这些查询字符串会默认显示在目标网址上。

如果要将重定向设为永久性,请将 R 更改为 R = 301

答案 1 :(得分:2)

RewriteRule ^productos.php /?view=productos [L,NE,B,QSA]

或者如果您想重定向

RewriteRule ^productos.php /?view=productos [L,NE,B,QSA,R=301]