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

htaccess-mod_rewrite是否将虚拟目录或文件作为参数传递回index.php?,php,.htaccess,mod-rewrite,url-parameters,Php,.htaccess,Mod Rewrite,Url Parameters,我正在尝试获取一个虚拟目录或文件,以便传回index.php 例如,我希望将/之后的所有内容传递回索引,然后根据数据库检查索引,但“virtual_directory”和“virtual_file.jpg”实际上并不存在,它们只是参数 somedomain.com/virtual_directory somedomain.com/virtual_file.jpg 现在,问题是一切都过去了。假设我只想转到主目录(或index.php),我会输入url(somedomain.com),它会将尾部的

我正在尝试获取一个虚拟目录或文件,以便传回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]
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 ^(.*)/$ /$1 [L,R=301]

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

选项-多视图
重新启动发动机
重写规则^(.*)/$/$1[L,R=301]
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_FILENAME}-F
重写规则^index.php[L]
php代码中的“else”部分无法访问的原因是始终会有一个
$\u服务器['REQUEST\u URI']
值。这是一个始终作为请求的服务器变量。因此,您永远不会得到“未传递参数”。如果要将参数作为GET变量或路径信息传递,您可能需要:

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?request=$1 [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';
}
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';
}
或路径信息:

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [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';
}
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';
}

那么问题出在哪里?添加了一个问题。我不知怎么忘了加上它。12shadow12的用词很有趣。。。我只是来写“美丽的答案”。干得好,林琼恩,非常感谢!