从mod_rewrite规则中排除网址 - 停止重定向到主页

时间:2018-01-06 10:57:21

标签: wordpress apache .htaccess mod-rewrite

我需要一个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

任何人都可以找出导致重定向到主页的原因吗?

谢谢!

1 个答案:

答案 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匹配,并永久重定向到RewriteRulehttps://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;)。这不包括任何其他标头   由浏览器发送。此值尚未转义(解码),   不像下面的大多数其他变量。