我需要一个mod_rewrite将所有http请求重定向到https,但我想要排除一个网址
这是我目前在.htaccess文件中的内容。
# force https
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^/template/.*$ [NC]
RewriteRule ^(.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,QSA]
</IfModule>
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
http://example.com/template/`不应重定向。但它被重定向到主页。
http://example.com/template/
301 Moved Permanently
https://example.com/index.php
301 Moved Permanently
https://example.com/
200 OK
任何人都可以找出导致重定向到主页的原因吗?
谢谢!
答案 0 :(得分:0)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.M7</version>
<relativePath />
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
.htaccess并不好。第一个请求RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{THE_REQUEST} !^[A-Z]+\ /template/.*\ HTTP [NC]
RewriteRule ^(.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,QSA]
与最后一个http://example.com/template/
匹配,后者内部重写为RewriteRule
,与第一个http://example.com/index.php
匹配,并永久重定向到RewriteRule
。 https://example.com/index.php
由于前一个引用REQUEST_URI
而在内部被重写。 RewriteRule
是最初从客户端收到的确切请求标头。它不会被任何内部重写更新。
<强> REQUEST_URI 强>
请求的URI的路径组件,例如 &#34; /index.html" ;.这显然排除了查询字符串 可用作名为QUERY_STRING的变量。
<强> THE_REQUEST 强>
浏览器向服务器发送的完整HTTP请求行(例如,&#34; GET /index.html HTTP / 1.1&#34;)。这不包括任何其他标头 由浏览器发送。此值尚未转义(解码), 不像下面的大多数其他变量。