如何为request_filename写入重写条件,然后指定

时间:2015-04-08 11:28:57

标签: php .htaccess

我遇到htaccess的问题,我想编写一个阻止提供指定文件的条件。

如果请求的文件名存在,只需提供即可,所以我有:

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .? - [L]

但我怎么能得到一个指定的文件不会被提供?我有这条路径用于我的控制器动作。例如example/do_something.php 是文件do_something.php的路径,但也是我的控制器操作的路径,我希望我的htaccess文件提供此操作而不是此文件,但仅限于此。

2 个答案:

答案 0 :(得分:0)

您可以使用此规则:

RewriteRule ^example/do_something\.php$ - [L,NC]

这将从此规则下面的所有规则中跳过do_something.php

答案 1 :(得分:0)

我试着anubhavaanswer

中说道
RewriteRule ^do_something\.php$ - [L,NC]

它并没有为我工作,但我设法通过将这些文件重定向到我的前端控制器来解决它:

RewriteRule ^example/(.+)\.php$ %{ENV:BASE}/app.php [L]

因此,在这种情况下,如果有人输入路径example/do_something.php,则该文件将不会被提供,并且请求由前端控制器发送

完整示例:

# If the requested filename exists
# And my route path for controller action is the same
# Don't serve file serve action
RewriteRule ^example/(.+)\.php$ %{ENV:BASE}/app.php [L]

# If the requested filename exists, simply serve it.
# We only want to let Apache serve files and not directories.
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .? - [L]

# Rewrite all other queries to the front controller.
RewriteRule .? %{ENV:BASE}/app.php [L]