我正在使用一个网络托管服务器,它接收如下网址:
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]
第二个不起作用,它仅在我的电脑为本地主机时起作用,但在网络托管服务器上时不起作用。
为什么?
我尝试了我的本地主机环境,一切正常。我希望这些规则也适用于网络托管服务器,但第二个规则却没有。
非常感谢,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/
我在以下位置找到它:
我也强烈推荐。
你建议我在测试中使用 R=302 也是正确的。
我也建议您查看有关重写规则标志的 apache 文档:
https://httpd.apache.org/docs/2.4/rewrite/flags.html
所以你全部都是对的。
非常感谢。
现已修复。