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

时间:2015-01-20 04:30:54

标签: 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),它会将尾随斜杠作为参数传递。如果我尝试去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';
}

2 个答案:

答案 0 :(得分:1)

为什么你的PHP代码的“else”部分没有被访问的原因是因为总会有一个$_SERVER['REQUEST_URI']值。这是一个始终是请求的服务器变量。因此,你永远不会得到“没有参数传递”。如果要将参数作为GET变量或PATH INFO:

传递,您可能需要什么
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';
}

或pathinfo:

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

答案 1 :(得分:0)

你可以试试这个

 <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>
相关问题