RewriteRule创建500内部服务器错误

Tom*_*Tom 10 php apache .htaccess mod-rewrite

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

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

我想要实现的是:

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

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

有谁知道我哪里出错了?

anu*_*ava 17

您的代码保证会生成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]
Run Code Online (Sandbox Code Playgroud)

上面的代码有一个额外的RewriteCond %{REQUEST_FILENAME} !-f,将确保在第一次之后不允许后续执行RewriteRule,因为/directory/index.php它将是一个有效的文件.


小智 14

我有同样的问题,发现在我的情况下还没有启用"重写"模块.所以我需要启用它,然后重启apache服务器:

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

希望这对任何人都有帮助.