我试图将虚拟目录或文件传递回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';
}
答案 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>