用于动态 URL 的 Apache Mod_Rewrite Htaccess

标签 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 这样的网站上打我的头。但我无法完全理解(或应用)我在那里阅读的内容。你能告诉我我做错了什么或者我应该如何解决这个问题吗?

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

    最佳答案

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

    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]
    

    关于用于动态 URL 的 Apache Mod_Rewrite Htaccess,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21691224/

    相关文章:

    linux - 为什么所有不匹配的流量都转到第一个 VirtualHost 而不是 httpd.conf 中的默认站点配置

    php - 关于 PHP 语法错误的 Apache 内部错误 500 (htaccess)

    php - 使用 .htaccess 的 Apache 文档根目录

    java - 在 Apache HttpClient 中禁用 Keep Alive

    php - 在 PHP 中构建更直观的聊天过滤器

    .htaccess - 强制 https,强制到子文件夹,强制 www,不要破坏站点

    php - 将文件名视为 PHP GET

    wordpress - 在 Wordpress 的 .htaccess 页面中添加 410

    php - 使用 PHP 重写 URL

    apache - 子域上的 CodeIgniter(mod_rewrite 问题)