我正在使用一个网络托管服务器来接收如下 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
看:
非常感谢,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
所以你总归是对的。
非常感谢。
现在已经修复。