如果文件未包含,则重定向

时间:2013-10-24 08:10:09

标签: php apache .htaccess mod-rewrite

我尝试过很多代码,但都没有。如果PHP不包含该文件,有没有办法用htaccess重定向。

到目前为止 htaccess:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/(.*).html index.php?lang=$1&menu=$2 [QSA,L]

因此,当我写任何/en/introduction.html时,它将被重写。 但是当有人想要获取我的一个PHP代码(例如/menu.php)时,应将其重定向到/index.php

在PHP中我可以用一开始的PHP代码来解决它,但是我放慢了系统的速度,这就是我想要htaccess的原因。

2 个答案:

答案 0 :(得分:3)

试试这个:

<强>的.htaccess

<IfModule mod_rewrite.c>

    Options +FollowSymLinks
    RewriteEngine on

    RewriteBase /

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l

    RewriteRule .* index.php [L]

</IfModule>

这样做,如果您的服务器中存在文件,例如/en/introduction.html,它将加载该文件。这适用于文件夹和链接。

然后将所有其他请求转发到index.php

现在,在index.php中,您可以使用$_SERVER['REQUEST_URI']并解析网址结构并执行您想要的操作。


至于禁止直接访问menu.php ...

<?php代码后将此行添加到 index.php

define('_IN_SCRIPT_)', true);

现在,在<?php代码

之后,将此行添加到 menu.php
if (!defined('_IN_SCRIPT_') || !_IN_SCRIPT_) {
    exit('Direct access not allowed.');
}

现在,当你在index.php中包含menu.php时,脚本将会起作用。如果有人直接在浏览器中访问了menu.php,他们就会收到错误。

答案 1 :(得分:0)

所以只有PHP才能用htaccess来解决它。 谢谢!