【问题标题】:Apache mod rewrite rule is not workingApache mod 重写规则不起作用
【发布时间】:2015-07-26 18:17:45
【问题描述】:

我已经检查过了,MOD REWRITE 已在服务器上启动并运行。

请求网址是: http://www.mydomain.com/user/123456

.htaccess 规则: RewriteRule ^/user/(.*)$ /user.php?user=$1 [L,QSA]

所以理论上它应该在内部重定向到带有变量u=123456 的php 脚本user.php,但什么都没有发生?我该如何调试呢?

Not Found
The requested URL /user/65464654 was not found on this server.

【问题讨论】:

  • .htaccess 上有RewriteEngine on 吗?
  • 是的,我愿意:RewriteRule 上的 RewriteEngine ^/user/(.*)$ /user.php?user=$1 [L,QSA]
  • 您是否尝试将user.php 重命名为不同的名称?该问题可能与具有相同名称的文件和目录有关,还有 dir user 是否存在?
  • 我确实改变了,但没有幸运。同样的问题
  • 如果 .htaccess 在 /user 中,那么 RewriteRule ^\d+$ user.php?user=$0 [L,QSA]

标签: php apache .htaccess mod-rewrite


【解决方案1】:

您需要去掉模式中的前导斜杠。当用于匹配 htaccess 文件中的规则时,会从 URI 中删除前导斜杠。所以你想要:

Options -Multiviews

RewriteEngine on 
RewriteRule ^user/(.*)$ /user.php?user=$1 [L,QSA]

-Multiviews 选项可能不需要,这是为了确保 mod_negotiation 不会接管并在应用重写规则之前自动将请求映射到 user.php

【讨论】:

  • 什么也没发生。我想将 www.mydomain.com/user/123456 翻译成 www.mydomain.com/user/user.php?user=123456 就像一个内部重定向
【解决方案2】:
if .htaccess is in /user then RewriteRule ^\d+$ user.php?user=$0 [L,QSA]

来自@Deadooshka 作品。

【讨论】:

  • OK 不匹配数字但不匹配字符
猜你喜欢
  • 2017-08-31
  • 1970-01-01
  • 2012-06-14
  • 1970-01-01
  • 1970-01-01
  • 2014-02-02
  • 2015-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多