我有一个基于PHP的网站,我试图适应处理SEO友好的博客,故事等网址。我正在尝试让.htaccess
工作,以便它可以转换:
example.com/blog/b-this-is-a-post
致:
example.com/blog.php?id=b-this-is-a-post
404页面错误,使用以下.htaccess
规则。在我创建.htaccess
规则之前,我得到了500个内部服务器错误。
RewriteEngine On
RewriteCond %{HTTP_HOST} example\.com [NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^blog/(.*)$ blog.php?id=$1 [NC,QSA]
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
重定向到HTTPS工作正常,但是将博客链接转换为blog.php
文件以处理它的regex行不起作用。我做错了什么?
1条答案
按热度按时间6rqinv9w1#
你似乎把两个不同的规则(HTTP到HTTPS * 和你的博客重写)混合在一起,并打破了这两个规则。“重定向到HTTPS”不能“正常”工作,因为它是无条件处理的,并且会创建重定向循环(除非HTTPS请求不处理此
.htaccess
文件?!).RewriteCond
(条件)只适用于后面的第一个RewriteRule
指令。RewriteRule
指令和前面的 conditions 一起构成了一个规则。否则,正则表达式是“OK”的(除了它可能匹配得太多)。
你需要像这样重新排序你的指令:
除非您服务于多个域,否则您可以删除检查
HTTP_HOST
的初始 * 条件 *。MultiViews也需要禁用(可能已经禁用),否则
blog
到blog.php
将丢失id
URL参数。我已经删除了 blog 重写中的
NC
标志。理想情况下,正则表达式应该更具限制性,只匹配有效的id
* 值 *,而不是 * 所有 *。special characters will result in an error这个规则。一旦完全测试,HTTP到HTTPS的重定向应该是301(永久)重定向,而不是像您目前所做的302(临时)重定向。