我的.htaccess文件中有以下内容:
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^directory/(.*)$ directory/index.php?id=$1
我想要实现的目标是:
访问网址www.mydomain.com/directory/10
时,浏览器会显示页面www.mydomain.com/directory/?id=10
,而不会更改网址的外观。
上述代码会产生500内部服务器错误。
有谁知道我哪里出错了?
答案 0 :(得分:17)
您的代码保证会生成500内部服务器错误,因为它会导致无限循环。原因是您的匹配URI模式是:^directory/(.*)$
在重写之前和之后匹配您的网址。一旦达到最大允许内部重写限制,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
将是一个有效的文件。
答案 1 :(得分:14)
我遇到了同样的问题,并发现"重写"在我的情况下,模块尚未启用。所以我需要启用它,然后重启apache服务器:
希望这对任何人都有帮助。
答案 2 :(得分:2)
您应该尝试在前面添加正斜杠:
RewriteRule ^/directory/(.*)$ directory/index.php?id=$1
之前我已经被发现了。
或者使用RewriteLog和RewriteLogLevel进行调试,查看Apache错误并访问日志以获取更多信息:
RewriteLogLevel 3
RewriteLog ${APACHE_LOG_DIR}/rewrite.log
这会在您的apache日志目录中留下一个日志文件。在我的情况下是/var/log/apache
答案 3 :(得分:0)
如果您正在使用CodeIgniter并且出现错误问题500.请按照解决方案进行操作。
因此,要删除CodeIgniter中URL的“index.php”段,您需要做两件事。第一种是编辑/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”。
答案 4 :(得分:0)
另一天在 Apache 上搜索一个奇怪的错误。 在我的 Docker Apache 2.4.48 高山容器上工作。但不是在生产中。
区别如下(只是一个点):
不适用于托管服务提供商
RewriteRule ^public/(.*)$ ./public/index.php?route=/$1 [L,QSA]
与托管服务提供商合作
RewriteRule ^public/(.*)$ /public/index.php?route=/$1 [L,QSA]