0

我想使用以下方式重定向此网址htaccess RewriteRule

news/tags/video to news.php?t=video
news/tags/interview to news.php?t=interview
news/tags/news to news.php?t=news 

网址:news.php?t=video, news.php?t=interview, news.php?t=news工作正常,我正确接收了“t”变量。但是当我申请时htaccess RewriteRules,“t”var 没有通过。

这是我的代码:

<IfModule mod_rewrite.c>
    #this rules are working fine
    RewriteRule ^news[/]?$ news.php
    RewriteRule ^news/(.+)[/]?$ news_article.php?idN=$1

    #problem rules
    RewriteRule ^news/tags/video[/]?$ news.php?t=video
    RewriteRule ^news/tags/interview[/]?$ news.php?t=interview
    RewriteRule ^news/tags/news[/]?$ news.php?t=news
</IfModule>
4

3 回答 3

1

模式^news/(.+)[/]?$匹配news/tags/video(等)并将 URL 重写为,news_article.php并且无法进行进一步匹配。你需要稍微调整一下这条规则:

RewriteRule ^news/?$ news.php
RewriteRule ^news/([^/]+)/?$ news_article.php?idN=$1
RewriteRule ^news/tags/video/?$ news.php?t=video
RewriteRule ^news/tags/interview/?$ news.php?t=interview
RewriteRule ^news/tags/news/?$ news.php?t=news
于 2013-05-08T09:05:41.960 回答
1

重写按匹配顺序处理。如果存在其他首先返回 true 的规则,则您的重定向状态可能不匹配。在您的情况下,在达到您的附加规则之前已找到匹配项。

<IfModule mod_rewrite.c>
  RewriteRule ^news/tags/([^/]+)/?$ news.php?t=$1 [L]
  RewriteRule ^news[/]?$ news.php [L]
  RewriteRule ^news/([^/]+)[/]?$ news_article.php?idN=$1 [L]
</IfModule>
于 2013-05-08T09:05:50.197 回答
0

请在您的代码上更改此RewriteRule指令:

RewriteRule ^news/(.+)[/]?$ news_article.php?idN=$1

...到这个:

RewriteRule ^news/([^/]+)[/]?$ /news_article.php?idN=$1

因为前面的规则匹配所有内容,包括“/”斜杠。只需使用以下这条规则作为您的解决方案#problem rules

RewriteRule ^([^/]+)/tags/([^/]+)[/]?$ /$1.php?t=$2
于 2013-05-08T09:25:59.263 回答