Apache Mod_Rewrite动态URL的Htaccess

时间:2014-02-11 01:19:11

标签: apache .htaccess mod-rewrite redirect http-status-code-301

我有这个链接

www.example.com/1/title

进入

www.example.com/post.php?author=1&title=title

因为这条规则

RewriteRule ^post/([0-9]+)/([\w-_:]+)/?$ post.php?author=$1&title=$2 [L,QSA,NC]

很好,但现在怎么办呢,如果有人输入www.example.com/post.php?author=1&title=title重定向到www.example.com/1/title

我花了几个小时在网上研究这个,但信息含糊不清(至少对我来说)并且不起作用。

到目前为止,有两件事让我感到困惑:

  • 将漂亮的url写入动态,然后动态变为漂亮 - 这不会创建循环吗?
  • 我也想走301重定向的路线,但我找不到 任何可行的代码,从第一个链接中取出变量 重定向。在我的脑海中,301将是正确的选择,但我看到了 很多人(例子)通过RewriteRule来做这件事。

我知道稍后可以使用$ 1和$ 2来访问(群组)...但是当尝试反向时我无法使其工作。例如:

RewriteRule ^post.php?author=([0-9]+)&title=([\w-_:]+)$ post/$1/$2

但就像我说没有任何作用。我一直在http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html这样的网站上打我的头,但我无法完全理解(或应用)我在那里读的东西。你能否让我知道我做错了什么或我该如何处理这个问题?

非常感谢你能给我的任何帮助

1 个答案:

答案 0 :(得分:1)

你需要一个像这样的新规则:

RewriteCond %{THE_REQUEST} \s/+post\.php\?author=([^&]*)&title=([^\s&]+) [NC]
RewriteRule ^ post/%1/%2? [R=302,L]

RewriteRule ^post/([0-9]+)/([\w-_:]+)/?$ post.php?author=$1&title=$2 [L,QSA,NC]