.htaccess添加RewriteRule后出现500服务器错误,请求协助排查
排查.htaccess导致的500内部服务器错误
错误原因分析
你的500错误来自.htaccess文件中的语法错误,具体问题有两个:
- RewriteRule指令被错误换行:Apache要求RewriteRule的模式、替换目标和标志必须在同一行(除非用
\转义换行,你没加转义符),换行后服务器会把拆分的内容当成无效指令。 - 第二个RewriteRule末尾多了一个多余的
.:这个点不属于规则的一部分,会触发语法解析错误。
修正后的.htaccess代码
# 开启重写引擎(如果之前没加的话必须添加) RewriteEngine On # Redirect search results RewriteRule ^search-results/find-(.*)/all-words-(on|off)/page-([0-9]+)/?$ index.php?SearchResults&SearchString=$1&AllWords=$2&Page=$3 [L] RewriteRule ^search-results/find-(.*)/all-words-(on|off)/?$ index.php?SearchResults&SearchString=$1&AllWords=$2&Page=1 [L]
额外优化建议
- 正则中的
find-?可以简化为find-:因为?表示前面的-可选,但你的URL结构里应该是固定的find-,去掉多余的?避免匹配意外的URL。 - 如果
SearchString不需要匹配斜杠,可以把(.*)改成([^/]+),防止匹配到后续的路径分段,提升正则准确性:RewriteRule ^search-results/find-([^/]+)/all-words-(on|off)/page-([0-9]+)/?$ index.php?SearchResults&SearchString=$1&AllWords=$2&Page=$3 [L] RewriteRule ^search-results/find-([^/]+)/all-words-(on|off)/?$ index.php?SearchResults&SearchString=$1&AllWords=$2&Page=1 [L]
内容的提问来源于stack exchange,提问作者P_code
相关产品推荐
相关产品推荐

