使用htaccess文件缩短网址?

时间:2015-01-10 18:00:33

标签: apache .htaccess mod-rewrite internal-server-error url-shortener

我是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'来获得回溯。”

这是什么意思?

1 个答案:

答案 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,但我不确定这是否会导致任何问题。