单点在这个.htaccess RewriteRule中做了什么?

时间:2016-02-09 22:39:37

标签: wordpress .htaccess mod-rewrite url-rewriting

使用Wordpress作为CMS,.htaccess文件如下所示:

RewriteEngine On                      # 1. ok - enables engine
RewriteBase /blog/                    # 2. ?? - sets blog directory as base for the rules
RewriteRule ^index\.php$ - [L]        # 3. ?? - replaces index.php by nothing in the URL
RewriteCond %{REQUEST_FILENAME} !-f   # 4. ?? - checks if request contains a file name
RewriteCond %{REQUEST_FILENAME} !-d   # 5. ?? - checks if request contains a directory name
RewriteRule . /blog/index.php [L]     # 6. ?? --> why this single dot (1 occurrence of a single character)?

我阅读了关于mod_rewrite的大量文档(现在还在阅读中),我知道正则表达式是什么以及它们是如何工作的,我的网站工作得很好。然而,我是复制粘贴而不确定是理解。线条有??是我不确定的(我不知道第6行是什么)。

在另一个基于https://stackoverflow.com/a/20979005的文件中(这适用于我的网站):

RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$           # 7. ok
RewriteRule !^subfolder/ /subfolder%{REQUEST_URI}  [L]   # 8. ?? - if it does not contain the subfolder, add it (strange as I wanted exactly to remove it from the URL but it works)

我的问题是:

  1. 我到第1到第5行了吗?
  2. 第6行到底做了什么?
  3. 是第8行的解释正确吗?

1 个答案:

答案 0 :(得分:1)

以下是答案:

  

Q1。我有没有得到第1到第5行?

A1。是的,你做了

  

Q2。第6行究竟做了什么?

A2。它表示对于任何非空的请求(单个DOT将匹配除着陆页之外的任何内容)转发到/blog/index.php

  

Q3。第8行的解释是否正确?

A3。是的,这是对的。没有什么奇怪的。您希望在客户的网址中删除/subfolder/,但是当您的网络服务器收到没有subfolder/的请求时,您希望在内部/静默添加subfolder/ ,以便您可以正确加载页面。