htaccess - mod_rewrite 将虚拟目录或文件作为参数传递回 index.php?

htaccess - mod_rewrite pass virtual directory or file back to index.php as parameter?

我正在尝试将虚拟目录或文件传回 index.php

例如,我希望 / 之后的所有内容都传回索引,然后根据数据库检查索引,但是 "virtual_directory" 和 "virtual_file.jpg" 实际上并不存在,它们只是参数.

somedomain.com/virtual_directory
somedomain.com/virtual_file.jpg

现在,问题是一切都过去了。所以说我只想转到主目录(或只是 index.php),我会输入 url (somedomain.com),它会将尾部斜杠作为参数传递。如果我尝试去 somedomain.com/index.php 也是一样的。它将通过 /index.php (即:我无法到达 else 语句)。

有什么方法可以让我直接上索引不通过吗?

这两个会作为参数传递,我也不要了

somedomain.com/
somedomain.com/index.php

.htaccess:

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /index.php [L]

index.php 将读取 '/' 之后的内容并对其进行处理。

if ($_SERVER['REQUEST_URI']) {
    echo nl2br("Parameter Passed!\n");
    echo 'Parameter That Passed:' .$_SERVER['REQUEST_URI'];
} else{
    echo 'No Parameter Passed';
    echo 'You Are Visiting domain.com/ or domain.com/index.php';
}

你可以试试这个

 <IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    RewriteRule ^(.*)/$ / [L,R=301]

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

您的 php 代码的 "else" 部分未被访问的原因是 总会有 一个 $_SERVER['REQUEST_URI']价值。这是一个服务器变量,永远是 请求 。因此,您永远不会达到 "no parameter passed"。如果将参数作为 GET 变量或作为 PATH INFO 传递,您可能想要什么:

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?request= [L]

您的代码将是:

if ($_GET['request']) {
    echo nl2br("Parameter Passed!\n");
    echo 'Parameter That Passed:' .$_GET['request'];
} else{
    echo 'No Parameter Passed';
    echo 'You Are Visiting domain.com/ or domain.com/index.php';
}

或路径信息:

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/ [L]

您的代码将是:

if ($_SERVER['PATH_INFO']) {
    echo nl2br("Parameter Passed!\n");
    echo 'Parameter That Passed:' .$_SERVER['PATH_INFO'];
} else{
    echo 'No Parameter Passed';
    echo 'You Are Visiting domain.com/ or domain.com/index.php';
}