【问题标题】:Change GET-URL to canonical (mod_rewrite)将 GET-URL 更改为规范 (mod_rewrite)
【发布时间】:2011-04-04 22:37:30
【问题描述】:

对于我的搜索引擎,我有页面...

/index.php?q=TERM

...显示搜索结果。

使用 mod_rewrite,我可以通过以下方式访问它:

/q/期限

我在 .htaccess 中使用的规则是这样的:

RewriteEngine on 
RewriteRule ^q/(.+)$ index.php?q=$1

这很好用。但是当我在我的 HTML 表单中输入一个术语并单击提交按钮时,我仍然被重定向到...

/index.php?q=TERM

如何让我的 GET 表单直接调用新的短 URL?它的代码是:

<form action="/index.php" method="get" accept-charset="utf-8">
...
</form>

【问题讨论】:

    标签: forms url mod-rewrite


    【解决方案1】:

    来自将始终使用?q=TERM 调用您的页面,而您的重写规则只说:/q/TERM 实际上是?q=TERM

    然后你需要将?q=TERM重写为/q/TERM first。但是我们需要处理循环。

    那么让我们试试吧:

    EDIT1:其他标志。 (我发现 [C] 重新运行规则,所以我们不希望这样)

    RewriteCond %{QUERY_STRING} ^q=(.*)$ [NC]
    RewriteRule ^$ /q/%1 [NC,L]
    
    RewriteRule ^q/(.+)$ index.php?q=$1 [NC,L]
    

    告诉我它的行为。

    相关:SO entry

    【讨论】:

    • 谢谢你的回答 :) 不幸的是,我的浏览器告诉我:网站重定向了这个请求,所以它永远无法完成。所以前两行(RewriteCond + RewriteRule)不起作用。最后几行和我之前的行一样。
    • 哼,我敢打赌它会失败但无法测试它。将检查另一个有类似循环的线程。
    • 现在我收到此错误消息:“内部服务器错误:服务器遇到内部错误或配置错误,无法完成您的请求。”
    • 您有访问权限或错误日志来帮助调试?编辑:在我的配置上设置它:重定向循环。修复。
    • 您只是在复制另一个问题的答案中的代码时犯了一个错误;)它与第二行完美配合:RewriteRule ^$ /q/%1? [NC,R,L]
    猜你喜欢
    • 2012-03-07
    • 2014-01-29
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多