【问题标题】:shorten url using htaccess file?使用 htaccess 文件缩短 url?
【发布时间】:2015-01-10 18:00:33
【问题描述】:

我完全是 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-内部伺服器错误”....

编辑:

当我尝试使用一个 rewrite_rule 时,它​​可以正常工作。喜欢

 RewriteRule ^([^/]+)/?$ /index.php?student-name=$1 [L]              

(或)

 RewriteRule ^student/([^/]+)/?$ /index.php?student-name=$1 [L]

当我尝试使用两个或多个 rewrite_rule 时,它​​会显示“500-内部伺服器错误”。喜欢

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' 获取回溯。”

这是什么意思?

【问题讨论】:

  • 尝试摆脱RewriteBase 指令。您确定在您的 Apache 服务器中编译并启用了 mod_rewrite 吗?
  • > 但是,我没有看到我的网址有任何变化....您尝试打开 website.com/xxx 吗?结果是 404 还是其他错误?服务器日志呢?
  • @MarcusMüller 它说“500-内部服务器错误”,
  • 然后查看你服务器的日志。

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


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

【讨论】:

  • 当我使用一个 rewrite_rule 时。但是当我使用多个 rewrite_rule 时不起作用,小写 l 也起作用。
  • 请参阅this。将其添加到您的 httpd.conf,然后重新启动 Apache。然后检查你的 Apache 错误日志,告诉我你得到了什么错误。
  • 错误日志:由于可能的配置错误,请求超出了 10 个内部重定向的限制。如有必要,使用“LimitInternalRecursion”增加限制。使用“LogLevel debug”获取回溯。
  • 我的规则不会导致这种情况,所以我假设你有更多的规则。请编辑您的问题并在您的整个(原始).htaccess 文件中进行编辑。
猜你喜欢
  • 2015-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-22
  • 2012-03-27
  • 1970-01-01
相关资源
最近更新 更多