当我使用 rewriterule /canonical/url 到另一个带有参数的 ?title=some-title

问题描述 投票:0回答:1

我正在使用一个网络托管服务器,它接收如下网址:

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]

第二个不起作用,它仅在我的电脑为本地主机时起作用,但在网络托管服务器上时不起作用。

为什么?

我尝试了我的本地主机环境,一切正常。我希望这些规则也适用于网络托管服务器,但第二个规则却没有。

apache .htaccess
1个回答
0
投票

非常感谢,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/

我在以下位置找到它:

调试.htaccess重写规则的技巧

我也强烈推荐。

你建议我在测试中使用 R=302 也是正确的。

我也建议您查看有关重写规则标志的 apache 文档:

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

所以你全部都是对的。

非常感谢。

现已修复。

© www.soinside.com 2019 - 2024. All rights reserved.