mod_rewrite 给出 404 错误

mod_rewrite 给出 404 错误

我正在制作一个 CMS,并尝试将帖子链接转换为漂亮的链接,如下所示:

原文链接:

http://localhost/index.php?id=13&category=Uncategorized&title=just-a-link

转换后的链接:

http://localhost/13/Uncategorized/just-a-test

我在 Linux Mint 上使用 Apache2,我的网站位于:

var/www/html

我使用 mod_rewrite 加载sudo a2enmod rewrite然后重新启动 apache2。

我的 apache2 配置文件/etc/apache2/apache2.conf在里面我有:

<Directory />
    Options FollowSymLinks
    AllowOverride None
    Require all denied
</Directory>

<Directory /usr/share>
    AllowOverride All
    Require all granted
</Directory>

<Directory /var/www/html>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

#<Directory /srv/>
#   Options Indexes FollowSymLinks
#   AllowOverride All
#   Require all granted
#</Directory>

这是我的 .htaccess 文件,位于var/www/html/.htaccess

RewriteEngine On
RewriteRule ^([^/]*)/([^/]*)/([^/]*)$ /single.php?id=$1&category=$2&title=$3 [L]

我也重新启动了 apache2 几次,但就是不起作用。

这是从 phpinfo 加载的模块,(您可以看到 mod_rewrite 已加载)(请查看下面的两张图片来了解我遇到的问题)

core mod_so mod_watchdog http_core mod_log_config mod_logio mod_version mod_unixd mod_access_compat mod_alias mod_auth_basic mod_authn_core mod_authn_file mod_authz_core mod_authz_host mod_authz_user mod_autoindex mod_deflate mod_dir mod_env mod_filter mod_mime prefork mod_negotiation mod_php5 mod_rewrite mod_setenvif mod_status

如果我直接从 url 中获取 $_GET 值而不使用 mod rewrite,它可以工作,但使用漂亮的 url,我就无法再获取 $_GET 值。

不漂亮: https://i.stack.imgur.com/ios8Z.png

漂亮的: https://i.stack.imgur.com/lEGRw.png

答案1

这不是 Apache 的问题。您需要从查询字符串中删除“p”标签。

答案2

将标签放在查询字符串中是没有意义的,您应该删除它们并将它们放在模板中,或者在创建 url 时对它们进行 urlencode。

$returnValue = urlencode('<p>another test</p>');

结果是“%3Cp%3Eanother+test%3C%2Fp%3E”,因此您可以尝试http://localhost/index.php?id=13&category=Uncategorized&title=%3Cp%3Eanother+test%3C%2Fp%3E

相关内容