如果执行的脚本是服务器上的PHP脚本,有没有办法忽略RewriteRule?

时间:2016-07-27 06:57:44

标签: php apache .htaccess mod-rewrite

我有一个重写规则,用于在用户访问我的index.php目录时将其路由到我的/images/*,以便我可以正确路由并在显示图像之前检查用户权限。

但是,这里的问题是,当我尝试向用户显示图像时,RewriteRule也会调用显示图像的调用。

如果执行的文件是PHP / phtml,有没有办法忽略RewriteRule?

我的htaccess

RewriteEngine on

RewriteRule (/)?images/(.*)$ /index.php?request=$1 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?request=$1 [L,QSA]

我正在寻找像

这样的东西
if the file executing is not a PHP script/being called from the server:
    RewriteRule (/)?images/(.*)$ /index.php?request=$1 [L,QSA]

3 个答案:

答案 0 :(得分:0)

您可以使用RewriteCond检查当前请求是否不适用于.php

RewriteEngine on

RewriteCond %{REQUEST_URI} !\.php$ [NC]
RewriteRule (/)?images/(.+)$ /index.php?request=$1 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?request=$1 [L,QSA]

答案 1 :(得分:0)

您可以尝试以下代码: -

.htaccess代码: -

RewriteRule (/)?images/authorize/(.*)$ /images/$1 [L,QSA]  // Change path or name according to you
RewriteRule (/)?images/(.*)$ /index.php?request=$1 [L,QSA]

PHP代码: -

检查用户授权。

if ($user) // Authorized
{
  redirect ('http://project_name/image/authorize/test.jpg'); //// Change path or name according to you
} else {
echo 'Not Authorized';
}

它可能对你有帮助。

答案 2 :(得分:0)

我不太精通网址重写。但我想你可能想尝试使用2 REWRITE_COND指令。一个用于检查请求者的IP,另一个用于检查文件类型。

this might be useful

" REMOTE_ADDR 远程主机的IP地址(请参阅mod_remoteip模块)。"

所以我要说的是,也许你可以检查IP并允许你自己的网络服务器的IP(第一个cond)来访问图像(为此你需要第二个cond)。你应该好好去。