htaccess 重定向除两个文件之外的所有内容

htaccess 重定向除两个文件之外的所有内容

有人知道如何编写一个 .htaccess 文件,将除两个文件之外的所有请求的所有流量重定向到 index.php。

并且在此过程中,还将任何不带“www”的请求重定向到“www”

另外,我可以将根目录中的 .htaccess 设为唯一可使用、关注、读取等的主要文件吗?这样我就不必将 .htaccess 文件放在每个子文件夹中。

而且,我应该在这些指令的末尾加上 [NC] 吗?

尝试过:

DirectoryIndex index.php

RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com$
RewriteCond %{REQUEST_URI} ! ^/robots\.txt$
RewriteCond %{REQUEST_URI} ! ^/googlestuff\.html$
RewriteRule ^/?$ "http\:\/\/www\.example\.com\/" [R=301,L]

但它不起作用???

答案1

!需要在正则表达式之前正确,否则 apache 会将其误认为是自己的参数并假定它是模式。规则中的模式本身需要足够通用才能匹配所有内容。

DirectoryIndex index.php

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/robots\.txt$
RewriteCond %{REQUEST_URI} !^/googlestuff\.html$
RewriteRule ^/?(.+) http://www.example.com/ [R=301,L]

如果您想强制请求在主机名中包含 www,则必须单独执行此操作,这是您需要使用标志的地方NC

RewriteCond %{HTTP_HOST} ^example.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

答案2

确保没有'AllowOverride 无' 在您的虚拟主机的 Web 服务器配置中。尝试设置 '允许覆盖全部“”。

例如在 debian 中,web 服务器默认配置为“AllowOverride 无' 选项,不允许使用 .htaccess 覆盖设置。

此外,当这些目录中的设置与父文件夹中的设置相同时,您不需要将 .htaccess 放在子目录中。

相关内容