繁体   English   中英

在子文件夹中重写 .htaccess

[英]Rewriterule .htaccess in subfolder

我需要使用 .htaccess 文件在子文件夹中执行重写。 当前 url 的形式如下:

domain.com/subfolder/chapter.php?urlkey=name

需要改写为:

domain.com/subfolder/chapter/name

在子文件夹中,我有一个带有以下代码的 .htaccess 文件:

<IfModule mod_rewrite.c>
    Options -Indexes
    RewriteEngine On
    RewriteBase /subfolder/

    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME}\.php -f 
    RewriteRule ^chapter/([a-z0-9]+)/?$ chapter.php?urlkey=$1 [L,NC,QSA]
</IfModule>

Modrewrite 已启用,但出于某种原因,当我转到 url 时

domain.com/subfolder/chapter/name

它返回以下错误:

Notice: Undefined index: urlkey

subfolder/.htaccess有此代码:

Options -MultiViews
RewriteEngine On
RewriteBase /subfolder/

RewriteRule ^chapter/([\w-]+)/?$ chapter.php?urlkey=$1 [L,NC,QSA]

选项MultiViews (参见http://httpd.apache.org/docs/2.4/content-negotiation.html )由Apache's content negotiation module ,该Apache's content negotiation modulemod_rewrite之前运行并使 Apache 服务器匹配文件的扩展名。 因此,如果/file是 URL,则 Apache 将提供/file.html

也不需要改写成chapter?...可以改写成chapter.php?...

您的错误与 htaccess 规则无关。

注意:未定义索引

当您尝试通过数组中不存在的键访问数组时发生。

Undefined Index通知的典型示例是检查下面的示例代码。

$data = array('foo' => '42', 'bar');
echo $data['spinach'];
echo $data[1];

spinach1都不存在于数组中,导致触发 an。

解决方案是在访问该索引之前确保该索引或偏移量存在。 这可能意味着您需要修复程序中的错误,以确保这些索引确实在您期望的时候存在。 或者这可能意味着您需要使用array_key_existsisset测试索引是否存在:

$data = array('foo' => '42', 'bar');
if (array_key_exists('spinach', $data)) {
    echo $data['spinach'];
}
else {
    echo 'No key spinach in array';
}

如果你有这样的代码:

<?php echo $_POST['message']; ?>
<form method="post" action="">
    <input type="text" name="message">
    ...

那么$_POST['message']在这个页面第一次加载时不会被设置,你会得到上面的错误。 只有在提交表单并且第二次运行此代码时,数组索引才会存在。 您通常通过以下方式检查:

if ($_POST)  ..  // if the $_POST array is not empty
// or
if ($_SERVER['REQUEST_METHOD'] == 'POST') ..  // page was requested with POST

当使用 $_POST、$_GET 或 $_SESSION 时,上面的通知经常出现。 对于 $_POST 和 $_GET 你只需要在使用它们之前检查索引是否存在。 对于 $_SESSION,您必须确保会话以 session_start() 开始并且索引也存在。

删除RewriteBase它对我RewriteBase

把它放在子文件夹中,请检查

Options -Indexes
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^chapter/([a-z0-9]+)/?$ chapter.php?url=$1 [L,NC,QSA]

你必须添加chapter.php? 而不是chapter? .

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM