我不知道为什么,但是当在我的 .htaccess 文件中使用以下 RewriteRule 时,我得到一个内部服务器错误 500。我启用了 mod_rewrite 我整天都在寻找解决方案。
# Enable Rewriting
RewriteEngine on
# Rewrite user URLs
RewriteRule ^(.*)/?$ users\/$1\/index.php
我不知道为什么,但是当在我的 .htaccess 文件中使用以下 RewriteRule 时,我得到一个内部服务器错误 500。我启用了 mod_rewrite 我整天都在寻找解决方案。
# Enable Rewriting
RewriteEngine on
# Rewrite user URLs
RewriteRule ^(.*)/?$ users\/$1\/index.php
Apache 的错误日志(通常命名为errors.log
)可能提供了有关它为什么不起作用的更多信息。很可能正则表达式由于某种原因无效,我将自己测试它然后编辑这篇文章。
500 错误很可能是由于重定向循环造成的。
您重写任何请求以users/$1/index.php
包含该 URL 本身,因此最终会出现重写循环。
尝试将您的重写规则更改为:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/users
RewriteRule ^(.*)/?$ users/$1/index.php
通过检查 URI 是否不以您开头,/users
您可以避免重写循环。
您有一个内部重写循环。重写引擎获取一个 URI 并将其放入引擎并获得一个结果 URI。如果它们相同,则重写引擎停止,否则,它将获取它返回的 URI并通过引擎将其放回。这意味着您再次/users/something/index.php
匹配并变成: ,然后等等等等。^(.*)/?$
/users/users/something/index.php/index.php
/users/users/users/something/index.php/index.phpusers/something/index.php/index.php
因此,您需要添加 aRewriteCond
以防止 URI 在它们已经以 开头时被重写users/
:
# Enable Rewriting
RewriteEngine on
# Don't rewrite if URI starts with "users"
RewriteCond %{REQUEST_URI} !users/
# Rewrite user URLs
RewriteRule ^(.*)/?$ users\/$1\/index.php