如何配置httpd RewriteRule优先跳转至index.php再 fallback到index.html?
Apache RewriteRule 实现优先跳转index.php、降级至index.html的配置
可以通过以下Rewrite规则实现需求,优先检测index.php是否存在,存在则跳转至该文件;若不存在则降级使用index.html:
RewriteEngine On # 跳过真实存在的文件或目录的处理 RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^ - [L] # 若index.php存在,将请求转发至index.php并携带查询参数 RewriteCond %{DOCUMENT_ROOT}/index.php -f RewriteRule ^(.*)$ /index.php?q=$1 [L] # 若index.php不存在,转发至index.html并携带查询参数 RewriteRule ^(.*)$ /index.html?q=$1 [L]
规则逻辑说明:
- 第一条规则组:先判断当前请求的路径是否是真实存在的文件或目录,如果是,直接跳过后续Rewrite规则(
[L]表示终止后续规则处理),避免干扰真实资源的访问。 - 第二条规则组:检查网站根目录下的
index.php是否存在,若存在则将任意请求路径(^(.*)$)转发至index.php,并将原路径作为q参数传递。 - 第三条规则组:当前面的规则未触发(即
index.php不存在)时,将请求转发至index.html,同样传递q参数。
效果验证:
- 当
index.php存在时:foo.bar/test→foo.bar/index.php?q=test - 当
index.php不存在时:foo.bar/test→foo.bar/index.html?q=test
内容的提问来源于stack exchange,提问作者Richard Hovdsveen
相关产品推荐
相关产品推荐

