htaccess中的重写规则没有用

时间:2013-07-17 18:16:09

标签: .htaccess

我试图美化我的网址,我的网址就像那样

   http://www.mysite.com/details.php?id=19&object=1

object = 1(videos)或object = 0(articles)

我想将此网址更改为

    http://www.mysite.com/videos/19

当然我制作视频,因为我提到当object = 1表示视频

当object = 0时

我想要这个

    http://www.mysite.com/articles/19

我试过从一些教程中使用它,但没有用。没有任何事情发生。

    Options +FollowSymLinks
    RewriteEngine On
    RewriteRule ^videos/([a-zA-Z]+)/([0-9]+)/$ details.php?object=$1&id=$2

以及如何使用RewriteCond检查对象是否为1或0,如果为1则打印视频其他文章。

任何帮助都会有很大帮助。

1 个答案:

答案 0 :(得分:1)

最好在这里使用RewriteMap。以下是如何使用它的示例:

  1. 将以下行添加到httpd.conf文件中:

    RewriteMap objMap txt://path/to/objectMap.txt
    
  2. /path/to/objectMap.txt一样创建一个文本文件:

    articles 0
    videos 1
    
  3. DOCUMENT_ROOT下的.htaccess文件中添加以下行:

    Options +FollowSymLinks -MultiViews
    RewriteEngine on
    
    RewriteRule ^([^/]+)/([0-9]+)/?$ /details.php?object=${objMap:$1}&id=$2 [L,QSA]
    
  4. 优势:通过此设置,您可以随时编辑或重新创建文件/path/to/objectMap.txt,而无需添加新规则。

    UPDATE:如果您无法控制Apache配置,则必须处理多个重写规则(每个对象ID映射一个),如下所示:

    Options +FollowSymLinks -MultiViews
    RewriteEngine on
    
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+details\.php\?id=([^&]+)&object=1\s [NC]
    RewriteRule ^ /videos/%1? [R=302,L]
    
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+details\.php\?id=([^&]+)&object=0\s [NC]
    RewriteRule ^ /articles/%1? [R=302,L]
    
    RewriteRule ^videos/([0-9]+)/?$ /details.php?object=1&id=$1 [L,QSA,NC]
    RewriteRule ^articles/([0-9]+)/?$ /details.php?object=0&id=$1 [L,QSA,NC]