Apache 需要有关.htaccess中重定向的帮助吗
我的问题是,非HTTPS请求和带有WWW的请求都会重定向到主页,当请求的url是根域时,这很好,但如果请求是文章、特殊页面等,则不会 示例1:http://Example.com/wiki/Articlename重定向到https://Example.com/wiki/Main_页面,但我想重定向到https://Example.com/wiki/Articlename 示例2:https://www.Example.com/wiki/Articlename重定向到https://Example.com/wiki/Main\u页面,但我想重定向到https://Example.com/wiki/Articlename 这是我在.htaccess中的设置:Apache 需要有关.htaccess中重定向的帮助吗,apache,.htaccess,redirect,mod-rewrite,Apache,.htaccess,Redirect,Mod Rewrite,我的问题是,非HTTPS请求和带有WWW的请求都会重定向到主页,当请求的url是根域时,这很好,但如果请求是文章、特殊页面等,则不会 示例1:http://Example.com/wiki/Articlename重定向到https://Example.com/wiki/Main_页面,但我想重定向到https://Example.com/wiki/Articlename 示例2:https://www.Example.com/wiki/Articlename重定向到https://Example
<IfModule rewrite_module>
RewriteEngine On
RewriteBase /
Options +FollowSymlinks
# Force HTTP to HTTPS/SSL
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://example.com/$1 [R,L]
# Redirect Example.com to Example.com/wiki/Main_Page
RewriteCond %{HTTP_HOST} example\.com [NC]
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^(.*)$ /wiki/$1 [PT,L]
# Short url for wiki pages
RewriteRule ^/?wiki(/.*)?$ %{DOCUMENT_ROOT}/w/index.php [PT,L]
# Permanent redirect www url to non-www
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule (.*) http://example.com/$1 [L,R=301]
</IfModule>
重新启动发动机
重写基/
选项+FollowSymlinks
#强制HTTP到HTTPS/SSL
重写cond%{SERVER_PORT}80
重写规则^(.*)$https://example.com/$1[R,L]
#将Example.com重定向到Example.com/wiki/Main_页面
重写cond%{HTTP_HOST}example\.com[NC]
重写cond%{REQUEST_URI}^/$
重写规则^(.*)$/wiki/$1[PT,L]
#wiki页面的短url
重写规则^/?wiki(/.*)$%{DOCUMENT_ROOT}/w/index.php[PT,L]
#将www url永久重定向到非www
RewriteCond%{HTTP_HOST}^www\.example\.com$[NC]
重写规则(.*)http://example.com/$1[L,R=301]
在共享主机(Debian 8 Jessie、Apache、PHP5.6)上使用MediaWiki,因此httpd.conf不是一个选项。Example.com仅为MediaWiki服务,因此域被重定向到https://Example.com/wiki/Main_页面(默认)
知道我做错了什么吗
编辑:在将“#强制HTTP到HTTPS/SSL”移动到.htaccess的顶部后,HTTPS重写现在可以工作,但WWW重写仍然无法工作。代码已更新。我认为您的问题在于重写规则后使用“L”——
它导致规则处理停止,而您的逻辑似乎需要几个规则才能执行我认为您的问题在于重写规则后使用“L”—— 它导致规则处理停止,而您的逻辑似乎需要执行多个规则