【发布时间】:2010-12-26 08:23:52
【问题描述】:
一个相当基本的 htaccess 问题,但我用的不多,所以我不知道。 我想检查请求的文件是否存在。如果是,则转发到一个页面,如果不是,则转发到另一个页面并将请求的路径作为 GET 传递。
提前致谢。
【问题讨论】:
标签: .htaccess mod-rewrite
一个相当基本的 htaccess 问题,但我用的不多,所以我不知道。 我想检查请求的文件是否存在。如果是,则转发到一个页面,如果不是,则转发到另一个页面并将请求的路径作为 GET 传递。
提前致谢。
【问题讨论】:
标签: .htaccess mod-rewrite
RewriteEngine On
# check if requested file or directory exists
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
# if not, pass it to index.php
RewriteRule ^(.*) index.php?page=$1 [QSA]
正如 Gumbo 建议的那样,如果您还想在文件存在时重写 URL,则可以重复不带 ! 的条件。也许您想用这种方法“保护”您的真实文件和文件夹。
【讨论】:
在RewriteCond condition 中使用-f 表达式来测试给定路径是否指向现有的常规文件:
RewriteEngin on
# file exists
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ one-page [L]
# file does not exist
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ another-page [L]
然后,初始请求的 URI 应该在环境变量中可用。
【讨论】:
RewriteRule !^index\.php$一样把它放到你的规则中。或者你附加一个附加条件:RewriteCond %{REQUEST_URI} !^/index\.php$.