【问题标题】:Apache rewrite rule is getting ignored while other functions are working properlyApache 重写规则被忽略,而其他功能正常工作
【发布时间】:2016-04-07 22:44:08
【问题描述】:

我在 Ubuntu 14.04 上运行了 LAMP 服务器,一切似乎都配置得很好。唯一的问题是,重写规则以某种方式被忽略而没有发出任何错误。修改 .htaccess 文件后,页面会像往常一样重新加载。我想要做的是使用以下代码将所有流量路由到 index.php:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]

其他规则正常运行,例如。如果我添加deny from all 并重新加载页面,我会立即收到错误消息。所有文件和文件夹都位于/var/www/ 根目录中。我不知道这里缺少什么,我花了几个小时在没有解决方案的情况下调试这个问题:(。

【问题讨论】:

    标签: php apache .htaccess mod-rewrite ubuntu-14.04


    【解决方案1】:

    . 只会匹配单个字符。尝试使用.* 匹配任何内容。

    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule .* index.php [L]
    

    【讨论】:

    • @Angie 关于删除的评论,RewriteRule 不匹配子字符串,只匹配完整字符串。它实际上有一个隐含的^$。这对你有帮助吗?如果是这样,您介意接受我的回答吗?
    • 嗨,克里斯,它不起作用。页面像往常一样令人耳目一新!真的很奇怪。
    • @Angie 您能否通过运行apache2ctl -M 来检查mod_rewrite 是否已启用,并检查您的Apache 配置的<Directory /var/www/html> 块中的AllowOverride 指令的内容。它需要包含FileInfoAll
    • 我已经检查过了,它似乎是配置赖特:<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory>
    • @Angie 很高兴您找到了解决方案。仅供参考,AllowOverride 指令不正确。如果你把它改成AllowOverride All然后重启Apache你可能会发现你的.htaccess方法有效。
    【解决方案2】:

    我找到了一个解决方案,通过将文档根指向 index.php,将所有流量重定向到 index.php:

    <VirtualHost *:80>
    ServerAdmin admin@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/index.php
    </VirtualHost>
    

    感谢@Chris 的帮助。

    【讨论】:

      猜你喜欢
      • 2013-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      相关资源
      最近更新 更多