当我使用 rewriterule /canonical/url 重定向到另一个带有参数 ?title=some-title 的网址时,htaccess 不起作用

当我使用 rewriterule /canonical/url 重定向到另一个带有参数 ?title=some-title 的网址时,htaccess 不起作用

我正在使用一个网络托管服务器来接收如下 URL:

https://www.domain.es/blog/name-of-article

.htaccess 尝试将这些 URL 转换为 GET 格式:

https://www.domain-name.es/blog-art.php?title=name-of-article

为了做到这一点,我在 .htaccess 中制定了以下两条规则:

# blog.php
RewriteRule ^(.*blog)$ https://www.my-domain.es/blog.php [NC,R=301]
# blog_art.php`
RewriteRule ^(.*blog)\/(.+)$ https://www.my-domain.es/blog_art.php?titulo=$2 [NC,R=301]

第二个不起作用,只有当它是本地主机时它才在我的 PC 上起作用,但是当它在网络托管服务器上时不起作用。

为什么?

任何帮助,将不胜感激。

请帮忙。

答案1

看:

https://stackoverflow.com/questions/77022505/htaccess-not-working-when-i-use-rewriterule-canonical-url-to-another-with-param/77034237#77034237

非常感谢,CBroe

在阅读您的帖子之前,我已使用以下命令解决了此问题:

Options -Multiviews


# blog.php
RewriteCond %{REQUEST_URI} .*blog$
RewriteRule .*blog$ https://localhost:33/blog.php [NC,R=302,L]

# blog_art.php
RewriteCond %{REQUEST_URI} .*blog/(.+)$
RewriteRule .*blog/(.+)$ https://localhost:33/blog_art.php?titulo=$1 [NC,R=302,L]

...

您说得对,我既不需要.*提前记录blog$,也不需要捕捉。我当时并没有太多了解,只是想着“以防万一”。

我必须阅读文档并进行测试。

我发现了一个非常好的 htaccess 测试页面,强烈推荐:

https://htaccess.madewithlove.com/

我在以下网址找到了它:

https://stackoverflow.com/questions/9153262/tips-for-debugging-htaccess-rewrite-rules

我强烈推荐这一点。

您也正确地建议我在测试中使用 R=302。

我也可以建议你看一下有关重写规则标志的 apache 文档:

https://httpd.apache.org/docs/2.4/rewrite/flags.html

所以你总归是对的。

非常感谢。

现在已经修复。

相关内容