我仍然是新的htaccess。我有一个静态网站,有几个目录内的内容。我用这个重定向301所有html页面到其https非www版本。
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule (.*) https://example.com/$1 [L,R=301]
我希望网站是动态的。所以当它重定向到https non-www版本后,我希望它能从一个特定的php文件中抓取资源。但是,我不知道如何做到这一点,同时也做了第一个301重定向。
我试图通过使用以下内容来获取资源:
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule (.*) https://example.com/$1
RewriteRule (.*)/(.*)/(.*)\.html$ https://note.mathpro.id/$2.php?name=$3 [L,R=302]
此URL http://example.com/category/uncategorized.html
从https://example.com/category.php?name=uncategorized
检索内容,但不像最初那样将其重定向到https://example.com/category/uncategorized.html
。
有人能帮忙吗?
1条答案
按热度按时间ui7jx7zq1#
...我不知道如何做到这一点,同时也做第一个301重定向.
这是两个完全独立的任务,需要两个不同的规则。您不应该修改第一个(规范重定向)规则。(由于某些原因,您删除了flags参数,即
[L,R=301]
-重定向需要L
标志才能按预期运行。)这不应该是一个外部重定向,它应该是一个 * 内部重写 *。换句话说,你希望(可见的)URL保持为
/category/uncategorized.html
。你不希望最终用户看到/category.php?name=uncategorized
。由于某种原因,在
RewriteRule
* pattern *(.*)/(.*)/(.*)\.html$
中也有三个捕获子模式,而示例URL/category/uncategorized.html
只有两个?你的正则表达式也应该有更多的限制。非常通用的
.*
的"问题"在于它是"贪婪的",消耗所有的东西,包括斜线。所以这个正则表达式也将匹配/foo/bar/baz/zip/bah/yop.html
。(但是它将准确地匹配/捕获哪些部分?)请尝试以下操作:
这假定
.htaccess
文件位于文档根目录中。然而,上述重写的一个小问题是,不管"handler"(例如
category.php
)是否存在,它都会重写URL。这不一定是什么大问题,但它意味着404是在category.php
(重写的文件路径)上触发的,而不是/category/uncategorized.html
(用户最初请求的URL)上。要解决此问题,可以先检查目标文件是否存在。例如: