我的.htaccess
文件中包含以下内容:
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^directory/(.*)$ directory/index.php?id=$1
我想达到的目标是:
当URL www.example.com/directory/10
被访问时,页面www.example.com/directory/?id=10
被显示在浏览器上而不改变URL的外观。
上面的代码创建了一个500内部服务器错误。
有人知道我哪里错了吗?
6条答案
按热度按时间olmpazwi1#
您的代码肯定会生成500内部服务器错误,因为它会导致无限循环。原因是您的匹配URI模式为:
^directory/(.*)$
在重写之前和之后匹配你的URL。一旦达到最大允许的内部重写限制,Apache抛出500个内部服务器错误并退出。
将代码更改为:
以上代码有一个额外的
RewriteCond %{REQUEST_FILENAME} !-f
,它将确保在第一次之后不允许RewriteRule的后续执行,因为/directory/index.php
将是一个有效文件。zz2j4svz2#
我也遇到了同样的问题,发现在我的例子中“rewrite”模块还没有启用。所以我需要启用它,然后重新启动apache服务器:
希望这对任何人都有帮助。
xghobddn3#
您应该尝试在前面添加一个正斜杠:
我以前也被抓过。
或者,使用RewriteLog和RewriteLogLevel进行调试,并查看Apache错误和访问日志以获取更多信息:
这将在apache日志目录中留下一个日志文件。
ecfsfe2w4#
如果您使用CodeIgniter并且出现错误问题500.请遵循解决方案。
因此,要在CodeIgniter中删除URL的“index.php”段,需要做两件事。第一件事是编辑
/system/application/config/config.php
文件,将index_page策略的值更改为空:第二步是创建文件
.htaccess
就是这样!从现在开始,用CodeIgniter创建的站点/系统的URL将不再有线程(有些人称之为“烦人的”)“index.php”。
kqhtkvqz5#
又是一天在Apache上寻找一个奇怪的错误。在我的Docker Apache 2.4.48 Alpine容器上工作。但是没有在生产中。
以下是区别(仅一个点):
未在宿主提供程序上工作
正在使用宿主提供程序
f87krz0w6#
只需取消#LoadModule rewrite_module的注解即可
因为默认情况下它被禁用/注解