13

我的 .htaccess 文件中有以下内容:

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^directory/(.*)$ directory/index.php?id=$1

我想要实现的是:

访问URL 时www.mydomain.com/directory/10,页面www.mydomain.com/directory/?id=10会显示在浏览器上,而不会改变 URL 的外观。

上面的代码创建了一个 500 内部服务器错误。

有谁知道我要去哪里错了?

4

6 回答 6

24

您的代码保证会生成 500 内部服务器错误,因为它会导致无限循环。原因是您匹配的 URI 模式是:^directory/(.*)$

在重写之前和之后匹配您的 URL。一旦达到允许的最大内部重写限制,Apache 就会抛出 500 个内部服务器错误并退出。

将您的代码更改为:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^directory/(.*)$ /directory/index.php?id=$1 [L,QSA,NC]

上面的代码有一个额外的RewriteCond %{REQUEST_FILENAME} !-f内容,可以确保在第一次之后禁止后续执行 RewriteRule,因为/directory/index.php这将是一个有效的文件。

于 2013-06-14T12:39:27.340 回答
19

我遇到了同样的问题,发现在我的情况下尚未启用“重写”模块。所以我需要启用它,然后重新启动 apache 服务器:

  • 启用“重写”模块:sudo a2enmod rewrite
  • 然后重启apache服务器:sudo service apache2 restart

希望这会帮助任何人。

于 2015-04-21T04:03:55.207 回答
2

您应该尝试在前面添加一个正斜杠:

RewriteRule ^/directory/(.*)$ directory/index.php?id=$1

我以前也被这件事抓住过。

或者使用 RewriteLog 和 RewriteLogLevel 进行调试,并查看 Apache 错误和访问日志以获取更多信息:

RewriteLogLevel 3
RewriteLog ${APACHE_LOG_DIR}/rewrite.log

这将在您的 apache 日志目录中留下一个日志文件。在我的情况下/var/log/apache

于 2013-06-14T12:00:26.273 回答
0

如果您正在使用 CodeIgniter 并且出现错误问题 500。请按照解决方案进行操作。

因此,要删除 CodeIgniter 中 URL 的“index.php”段,您需要做 2 件事。首先是编辑/system/application/config/config.php文件,将 index_page 策略的值更改为空:

$config['index_page'] = '';

第二步,创建文件.htaccess

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L]

就是这样!从现在开始,使用 CodeIgniter 制作的站点/系统的 URL 将不再包含线程(某些人称之为“烦人”)“index.php”。

于 2016-04-24T15:05:49.240 回答
0

又一天在 Apache 上搜索一个奇怪的错误。在我的 Docker Apache 2.4.48 alpine 容器上工作。但不在生产中。

这是区别(只是一个点):

不在托管服务提供商上工作

RewriteRule ^public/(.*)$ ./public/index.php?route=/$1 [L,QSA]

致力于托管服务提供商

RewriteRule ^public/(.*)$ /public/index.php?route=/$1 [L,QSA]
于 2021-06-30T20:40:16.393 回答
0

只需取消注释#LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so

因为默认情况下它被禁用/评论

于 2022-01-22T11:52:15.103 回答