小mod_rewrite问题

时间:2010-06-07 16:43:37

标签: php linux apache .htaccess

我有一个分类广告网站。每个分类最初都是这样链接的:

   mydomain.com/ad.php?ad_id=Bmw_M3_M_tech_113620829

我应该使用什么RewriteRule来使这个链接看起来像:

   mydomain.com/Bmw_M3_M_tech_113620829

另外,我需要将什么添加到我的.htaccess文件中? 这就是我到目前为止所做的:

Options +FollowSymLinks
Options +Indexes
RewriteEngine On
RewriteBase /

我刚刚启用了mod_rewrite,它首先在我的Ubuntu服务器上被禁用,使用:

 a2enmod rewrite

我需要知道或做的其他事情吗?

由于

2 个答案:

答案 0 :(得分:3)

看起来你需要这样的东西:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/ad\.php
RewriteRule ^(.*)$ ad.php?ad_id=$1 [L]

这应该将mydomain.com/Bmw_M3的请求重写为mydomain.com/ad.php?ad_id=Bmw_M3

RewriteCond排除了对ad.php的直接请求被重写。 RewriteRule只会替换mydomain.com/之后的任何内容,而不是$1[L](last)标志停止重写过程,因此它不会再应用此规则重写的请求。

答案 1 :(得分:0)

您需要添加规则本身。需要正则表达式=)

RewriteRule ([a-zA-Z0-9_]+) ad.php?ad_id=$1

当然,此正则表达式应根据您传递的广告ID进行微调 - 通过告知该广告ID中的哪些字符和类似内容。例如,如果所有广告ID都以及下划线和9位数字结尾,则为:

RewriteRule ([a-zA-Z0-9_]_[0-9]{9}) ad.php?ad_id=$1

哦,还有,启用mod_rewrite后重启apache。确保AllowOverride未设置为None,因此在这种情况下,apache将忽略目录中的.htaccess文件。