重定向不适用于 .htaccess 文件
Redirection not working with .htaccess file
我正在使用 htaccess 从 URL 中隐藏 GET 变量。我有问题。我的项目结构是这样的:
--project
index.php
/views
login.php
example.php
/user
dashboard.php
因此,当我使用类似“localhost/project/login”的内容时,我被正确地重定向到 login.php 页面。但是当我执行类似“localhost/project/user/dashboard”的操作时,我得到了 Apache 生成的 404 Not Found 响应。
这就是我在 PHP 中用来包含带有 GET 变量的页面的内容:
PHP代码:
<?php
if(isset($_GET['page'])) {
$page = $_GET['page'].'.php';
if(is_file('views/'.$page)) {
include 'views/'.$page;
} else {
echo 'Page does not exist';
}
?>
htaccess 文件:
RewriteEngine on
RewriteRule ^([A-Za-z0-9-]+)/?$ index.php?page= [NC]
有人可以给我一些指导吗?我没有使用 .htaccess 文件的经验
RewriteRule ^([A-Za-z0-9-]+)/?$ index.php?page= [NC]
我假设您的 .htaccess
文件位于 /project
子目录中(因为 localhost/project/login
URL 会被您的 PHP代码)。
然而,RewriteRule
指令中的正则表达式与请求 localhost/project/user/dashboard
不匹配,因为正则表达式不匹配 user/dashboard
因为正则表达式不允许斜杠(除了在URL-path 结束)。因此,请求只是直接进入 Apache 404。
您需要在 RewriteRule
模式 中允许使用斜杠,您可以通过在字符 class 中包含一个斜杠来实现。例如:
RewriteRule ^([/A-Za-z0-9-]+?)/?$ index.php?page= [L]
需要制作 +
量词 non-greedy 以免消耗可选的尾部斜杠。
注意:这里不需要 NC
标志,但需要 L
标志(如果您稍后添加更多指令)。
我正在使用 htaccess 从 URL 中隐藏 GET 变量。我有问题。我的项目结构是这样的:
--project
index.php
/views
login.php
example.php
/user
dashboard.php
因此,当我使用类似“localhost/project/login”的内容时,我被正确地重定向到 login.php 页面。但是当我执行类似“localhost/project/user/dashboard”的操作时,我得到了 Apache 生成的 404 Not Found 响应。
这就是我在 PHP 中用来包含带有 GET 变量的页面的内容:
PHP代码:
<?php
if(isset($_GET['page'])) {
$page = $_GET['page'].'.php';
if(is_file('views/'.$page)) {
include 'views/'.$page;
} else {
echo 'Page does not exist';
}
?>
htaccess 文件:
RewriteEngine on
RewriteRule ^([A-Za-z0-9-]+)/?$ index.php?page= [NC]
有人可以给我一些指导吗?我没有使用 .htaccess 文件的经验
RewriteRule ^([A-Za-z0-9-]+)/?$ index.php?page= [NC]
我假设您的 .htaccess
文件位于 /project
子目录中(因为 localhost/project/login
URL 会被您的 PHP代码)。
然而,RewriteRule
指令中的正则表达式与请求 localhost/project/user/dashboard
不匹配,因为正则表达式不匹配 user/dashboard
因为正则表达式不允许斜杠(除了在URL-path 结束)。因此,请求只是直接进入 Apache 404。
您需要在 RewriteRule
模式 中允许使用斜杠,您可以通过在字符 class 中包含一个斜杠来实现。例如:
RewriteRule ^([/A-Za-z0-9-]+?)/?$ index.php?page= [L]
需要制作 +
量词 non-greedy 以免消耗可选的尾部斜杠。
注意:这里不需要 NC
标志,但需要 L
标志(如果您稍后添加更多指令)。