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服务器:
希望这对任何人都有帮助.