苦苦于重写规则

时间:2012-07-02 14:47:06

标签: apache mod-rewrite url-rewriting

我正在努力解决关于apache的特定重写规则。更确切地说,我很难理解它有什么问题。

我需要像这样重写网址:

http://www.mysite.com/section/venue_info/123/name
or
http://www.mysite.com/section/venue_info/123/
or
http://www.mysite.com/section/venue_info/123

         |
         V

http://www.mysite.com/section/venue_info.php?id=123

请注意,section是等式中的变量。在实时站点中,它可以是多个值中的一个,因此无论提供哪个部分,我都需要使用该部分。我在apache配置中得到了这个:

DocumentRoot /var/www/site/trunk/publish
<Directory /var/www/site/publish/trunk/>
    Options -Indexes +FollowSymLinks 
    AllowOverride None
    Order allow,deny
    Allow from all

    RewriteEngine on
    RewriteBase /
    RewriteRule ^\/(\w+)\/venue_info\/(\d+)(\/.+|\/?)$ $1/venue_info.php?id=$2
</Directory>

但是这不匹配。我尝试了各种各样的变化,但没有运气。这里有什么权利RewriteRule?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

好的,想通了!

显然,mod_rewrite指令在<Directory>元素内不起作用。一旦我将它们放入<Location>区块,一切正常。所以现在我的apache配置看起来像这样:

DocumentRoot /var/www/site/trunk/publish
<Directory /var/www/site/publish/trunk/>
    Options -Indexes +FollowSymLinks 
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

<Location "/">
    RewriteEngine on
    RewriteBase /
    RewriteRule ^\/(\w+)\/venue_info\/(\d+)(\/.+|\/?)$ $1/venue_info.php?id=$2
</Location>

一切正常。