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';
}
我正在尝试将虚拟目录或文件传回 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';
}