Apache - RewriteRule“$(。*)^”模式不适用于空请求

时间:2016-08-08 15:30:22

标签: regex apache .htaccess mod-rewrite

我正在尝试使用Apache2和PHP进行一些URL重写,问题是我创建了一个使用rewrite_mod的.htaccess文件,这里是:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ webroot/index.php [QSA,L]

^(.*)$模式应匹配所有内容,但它与空请求不匹配,我不知道为什么。

为了给你一个例子,这里的/root文件夹是.htaccess文件。

  • 请求/root/anything匹配;
  • 请求/root/some/thing也匹配;
  • 请求/root/不匹配。

此处,/root/请求应匹配,因为模式^(.*)$表示“将任意字符从0次匹配到任意次数”。

有谁知道为什么它与空请求不匹配?

我目前正在Linux Mint下运行LAMP。

1 个答案:

答案 0 :(得分:2)

你的规则如下:

RewriteEngine On

# handles landing page
RewriteRule ^/?$ webroot/index.php [L]

# handles rest
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . webroot/index.php [L]

mod_dir模块如果在mod_rewrite之前运行,并将DirectoryIndex处理程序添加到着陆页,即/index.php,从而因RewriteCond %{REQUEST_FILENAME} !-f条件而阻止执行您的规则。< / p>