【问题标题】:htaccess rewriting user pretty url to perform queryhtaccess 重写用户漂亮的 url 以执行查询
【发布时间】:2012-01-21 10:56:37
【问题描述】:

假设我有一个站点 mysite.com,它是一个 wordpress 站点。

我已经有以下重写规则来删除 index.php:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

如果我访问 mysite.com/?blog_type=a-blog-type 我会得到正确的页面,其中只有该类型的博客

我想要的是让用户能够输入 mysite.com/blogs/a-blog-type/ 并让它真正进行查询,但继续显示 /blogs/a-blog-type /

我在这里查看了许多类似的答案,但大多数似乎都是这样,它只是从查询重定向到漂亮的 url,这是我不想要的,因为漂亮的 url 只会导致 404错误,因为它没有进行查询。

感谢您的帮助。

【问题讨论】:

    标签: wordpress .htaccess url rewrite


    【解决方案1】:

    此重写规则将采用任何mysite.com/blogs/a-blog-type/ URL 并将其重写为mysite.com/?blog_type=a-blog-type。所以mysite.com/blogs/a-blog-type/会显示给用户,但mysite.com/?blog_type=a-blog-type会被加载。

    RewriteRule ^blogs/([^/]*)((/)?)$ ?blog_type=$1 [nc,l]
    

    编辑:这就是您的配置现在的样子:

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^blogs/([^/]*)((/)?)$ ?blog_type=$1 [nc,l]
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    

    【讨论】:

    • 现在我要把它放在 中吗?还是在我已有的 之后再制作一个?
    • 你可以放在同一个。只要你把它放在 index.php 规则之前,它就可以工作。 (所以在您的示例中,我将它直接放在“RewriteBase”之后)。我已经更新了我的答案以包含一个示例。
    • 感谢您的帮助,但它似乎仍然无法正常工作。如果我做了类似的事情: RewriteRule ^blogs$ www.google.com [nc,l] 只是为了测试它,是否应该将其重定向到 google.com?
    • 是的,这应该指向 Google,但前提是您在测试时没有在 URL 末尾添加“/”。您还可以使用 RewriteLog 来查看幕后发生的确切情况,这对调试非常有帮助。 httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritelog
    • 谢谢,我会查看 rewriteLog,因为它似乎什么也没做......但我知道文件正在被访问,因为 index.php 已经消失了,如果我拼写错误,整个网站无法访问。一旦我看到日志发生了什么,我会回复你
    猜你喜欢
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    • 2012-11-01
    • 2015-10-14
    • 1970-01-01
    相关资源
    最近更新 更多