.htaccess重写网址不起作用

时间:2014-08-22 23:15:27

标签: .htaccess

我想重写以下网址:

http://www.domain.com/cars/cars.php?cars_item=231

http://www.domain.com/cars/231/

我尝试了以下编码,但由于某些原因无法使其正常工作。

在子文件夹cars中,我放置了包含以下内容的.htaccess文件:

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteRule ^([0-9]+)\/?$ cars.php?cars_item=$1 [NC]
</IfModule>

Apache已正确配置,因为我尝试使用.htaccess文件从一个域重定向到另一个域并且工作正常。

有人可以向我解释我做错了吗?

1 个答案:

答案 0 :(得分:1)

这条规则可以做你想要的:

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

# Redirect cars.php?cars_item=231 to cars/231/
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+cars/cars\.php\?cars_item=([^&\s]+) [NC]
RewriteRule ^ /cars/%1? [R=302,L]

# Internally forward cars/231/ to cars.php?cars_item=231
RewriteRule ^cars/([0-9]+)/?$ /cars/cars.php?cars_item=$1 [NC,L]

第一条规则是负责接收不友好的URL并将其转换为友好的URL。

第二条规则将在内部重定向而不更改浏览器网址。

这些规则应放在您的域的根目录中,如果是cars之前的文件夹。

你需要这样做,以避免重定向循环,除非你使用的是更新版本的HTTPD,但由于我不知道任何服务器细节,我只是给你一个通用的例子。


如果你想要的只是能够访问:

http://www.domain.com/cars/231/

如果不重定向原始网址,则可以使用:

RewriteRule ^cars/([0-9]+)/?$ cars/cars.php?cars_item=$1 [NC,L]

上述规则负责接收上述URL并将其发送给正确的处理程序。