【问题标题】:Little mod_rewrite problem小 mod_rewrite 问题
【发布时间】:2011-02-28 19:15:27
【问题描述】:

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

   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

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

谢谢

【问题讨论】:

    标签: php linux apache .htaccess


    【解决方案1】:

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

    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](最后一个)标志停止重写过程,因此它不会再对该规则重写的请求应用任何重写。

    【讨论】:

    • Daniel,`你认为你能详细解释一下代码吗?
    • @Camran:更新了我的答案。如果您需要任何进一步的说明,请告诉我:)
    【解决方案2】:

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

    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 文件。

    【讨论】:

    • 罗伯特,我在 Ubuntu 服务器上有 apache2,所有 AllowOverride 指令都在 000-default 文件中...我应该将它们全部更改为“AllowOverride All”吗?
    • 是的,这样 .htaccess 文件将被执行。
    • 哦,我在第二个正则表达式中犯了一个错误。右括号后缺少 $ 符号:RewriteRule ([a-zA-Z0-9_]_[0-9]{9})$ ad.php?ad_id=$1
    猜你喜欢
    • 2010-09-16
    • 1970-01-01
    • 2014-09-20
    • 2012-06-07
    • 2018-12-21
    • 2013-04-05
    相关资源
    最近更新 更多