Php 一个小的修改问题

Php 一个小的修改问题,php,linux,apache,.htaccess,Php,Linux,Apache,.htaccess,我有一个分类广告网站。每个分类最初都是这样链接的: mydomain.com/ad.php?ad_id=Bmw_M3_M_tech_113620829 我应该使用什么规则使此链接看起来像: mydomain.com/Bmw_M3_M_tech_113620829 另外,我需要向.htaccess文件添加什么? 这就是我到目前为止所做的: Options +FollowSymLinks Options +Indexes RewriteEngine On RewriteBase /

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

   mydomain.com/ad.php?ad_id=Bmw_M3_M_tech_113620829
我应该使用什么规则使此链接看起来像:

   mydomain.com/Bmw_M3_M_tech_113620829
另外,我需要向.htaccess文件添加什么? 这就是我到目前为止所做的:

Options +FollowSymLinks
Options +Indexes
RewriteEngine On
RewriteBase /
我刚刚启用了mod_rewrite,该功能最初在我的Ubuntu服务器上被禁用,使用:

 a2enmod rewrite
还有什么我需要知道或做的吗


谢谢

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

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/ad\.php
RewriteRule ^(.*)$ ad.php?ad_id=$1 [L]
RewriteRule ([a-zA-Z0-9_]_[0-9]{9}) ad.php?ad_id=$1
这应该将对
mydomain.com/Bmw_M3
的请求重写为
mydomain.com/ad.php?ad_id=Bmw_M3


RewriteCond
禁止重写对
ad.php
的直接请求。
RewriteRule
将简单地替换
mydomain.com/
之后的任何内容,以代替
$1
[L]
(last)标志停止重写过程,这样它就不会对由此规则重写的请求应用任何重写。

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

当然,这个正则表达式应该根据您正在传递的广告ID进行微调——通过告诉该广告ID和类似内容中可以包含哪些字符。例如,如果所有ad ID都以和下划线和9位数字结尾,则如下所示:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/ad\.php
RewriteRule ^(.*)$ ad.php?ad_id=$1 [L]
RewriteRule ([a-zA-Z0-9_]_[0-9]{9}) ad.php?ad_id=$1

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

Daniel,`您能详细解释代码吗?@Camran:更新了我的答案。如果你需要进一步澄清,请告诉我:)罗伯特,我在Ubuntu服务器上安装了apache2,所有AllowOverride指令都在默认文件中。。。我是否应该将它们全部更改为“AllowOverride all”?是的,这样会执行.htaccess文件。哦,我在第二个正则表达式中犯了一个错误。右括号后缺少一个$符号:
RewriteRule([a-zA-Z0-9\]\[0-9]{9})$ad.php?ad\$id=$1