我是htaccess的初学者,我正在努力缩短我的后续网址。
这
http://website.com/index.php?student-name=john
http://website.com/index.php?teacher-name=amy
http://website.com/index.php?class=xxx
要
http://website.com/john
http://website.com/amy
http://website.com/xxx
我尝试过以下.htaccess代码,
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ /index.php?student-name=$1 [L]
RewriteRule ^([^/]+)/?$ /index.php?teacher-name=$2 [L]
RewriteRule ^([^/]+)/?$ /index.php?class=$3 [L]
但是,我显示“500-internal servor error”....
编辑:
当我尝试使用一个rewrite_rule时,它的工作正常。像
RewriteRule ^([^/]+)/?$ /index.php?student-name=$1 [L]
(或)
RewriteRule ^student/([^/]+)/?$ /index.php?student-name=$1 [L]
当我尝试使用两个或更多的rewrite_rule时,它显示“500-internal servor error”。像
RewriteRule ^([^/]+)/?$ /index.php?student-name=$1 [L]
RewriteRule ^teacher/([^/]+)/?$ /index.php?teacher-name=$1 [L]
(或)
RewriteRule ^student/([^/]+)/?$ /index.php?student-name=$1 [L]
RewriteRule ^teacher/([^/]+)/?$ /index.php?teacher-name=$1 [L]
它显示的错误日志是:“由于可能的配置错误,请求超过了10个内部重定向的限制。如果需要,请使用'LimitInternalRecursion'来增加限制。使用'LogLevel debug'来获得回溯。”
这是什么意思?答案 0 :(得分:1)
这是一个坏主意。为什么? Apache如何知道第一个路径段中的字符串是学生,教师还是班级?它没有,因此它将始终重写为学生姓名。
而是使用以下网址:
http://example.com/student/john
http://example.com/teacher/amy
http://example.com/class/xxx
现在重写很简单,因为每个组都有一个共同的前缀。
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule ^student/([^/]+)/?$ /index.php?student-name=$1 [L]
RewriteRule ^teacher/([^/]+)/?$ /index.php?teacher-name=$1 [L]
RewriteRule ^class/([^/]+)/?$ /index.php?class=$1 [L]
至于500内部服务器错误,您需要检查Apache错误日志。确保已启用mod_rewrite,并在执行此操作后重新启动Apache。除了规则之外,我将FollowSymLinks
中的小写l更改为大写L,但我不确定这是否会导致任何问题。