我们有一个如下所示的重写规则:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule (?!^(cms|images|js|mobile)(/.*|)$)^.*$ page.php [NC,L]
哪个按预期工作;如果该文件不存在,请转发到 page.php,这是一个通用页面,允许使用自定义 URL 的页面。
我们还想强制 www。在域之前:example.com -> www.example.com
为此,我们使用:
RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
这也有效,但是当两者应该一起工作时:
example.com/non-existent-file
我们最终得到:
www.example.bom/page.php
默认为我们的 404 页面。如何修改这些规则以协同工作?我尝试过使用一些不同的 suffic 字符(即删除 [NC,L] 中的 L 以尝试处理这两个规则)。
我还尝试在 www 重定向(并删除 L 后缀)下重复转发到 page.php 行,但没有成功。
整个 HTACCESS 文件如下所示:
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule (?!^(cms|images|js|mobile)(/.*|)$)^.*$ page.php [NC,L]
RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule ^(.*)$ http://www.example.com/$1 [R=302,L]
另外,我可以使用 %{CONSTANT} 代替 example.com 来代表当前域吗?