-2

我尝试了很多代码,但没有一个有效。如果 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 的原因。

4

2 回答 2

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']并解析 URL 结构并执行您想要的操作。


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

将此行添加到您的index.php<?php标记后:

define('_IN_SCRIPT_)', true);

现在,将此行添加到menu.php之后的<?php标记

if (!defined('_IN_SCRIPT_') || !_IN_SCRIPT_) {
    exit('Direct access not allowed.');
}

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

于 2013-10-24T08:55:48.147 回答
0

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

于 2013-10-24T08:25:18.907 回答