用于动态 URL 的 Apache Mod_Rewrite Htaccess

Posted

技术标签:

【中文标题】用于动态 URL 的 Apache Mod_Rewrite Htaccess【英文标题】:Apache Mod_Rewrite Htaccess for Dynamic URL 【发布时间】:2014-03-08 14:40:50 【问题描述】:

我有这个链接

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】:

你需要这样的新规则:

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]

【讨论】:

谢谢 - 这几乎可以工作。我会看看我是否能让它完全发挥作用。到目前为止,它让我跳到example.com/home/rezz/public_html/post/16/… 做了一条艰难的道路并且它成功了 - RewriteRule ^ example.com/post/%1/%2? [R=302,L] - 非常感谢。 或者你可以在目标中添加一个斜线作为RewriteRule ^ /post/%1/%2? [R=302,L]

以上是关于用于动态 URL 的 Apache Mod_Rewrite Htaccess的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 apache mod_rewrite 规则重定向到动态 URL(不是经典重定向)?

htaccess 用于 apache 未读取的干净 url?

用于本地开发的 Apache 单一动态虚拟主机配置

apache_conf Barebones Backbone路由器示例,用于具有本地URL的Apache站点,例如http:// local5 / backbone-router。

Mod_rewrite 和 $_GET 变量

如何动态地将 id 传递给 Bootstrap 验证器规则的 url:远程用于相同的表单输入字段?