【问题标题】:What wrong with my .htaccess file so that it can work on linux? [closed]我的 .htaccess 文件有什么问题才能在 linux 上运行? [关闭]
【发布时间】:2012-09-30 02:12:17
【问题描述】:

我在 codeigniter 中有一个项目,并且我有一个用于向用户隐藏 index.php 页面的 .htaccess 文件。在本地机器上,当项目在 Windows 操作系统中时,但是当我在 linux(ubuntu 发行版)中测试时,.htaccess 功能不起作用。任何关于我可以为 linux 做什么的建议都非常感谢。 我的 .htaccess 文件:

<IfModule mod_rewrite.c>

    RewriteEngine On
    RewriteBase /myproject/

    ### Canonicalize codeigniter URLs

    # If your default controller is something other than
    # "welcome" you should probably change this
    RewriteRule ^(platform(/index)?)/?$ / [L,R=301]
    RewriteRule ^(.*)/index/?$ $1 [L,R=301]

    # Removes trailing slashes (prevents SEO duplicate content issues)
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)/$ $1 [L,R=301]

    # Enforce www
    # If you have subdomains, you can add them to
    # the list using the "|" (OR) regex operator
   RewriteCond %{HTTP_HOST} !^(localhost|myproject) [NC]
   RewriteRule ^(.*)$ http://localhost/myproject/$1 [L,R=301]



    # Removes access to the system folder by users.
    # Additionally this will allow you to create a System.php controller,
    # previously this would not have been possible.
    # 'system' can be replaced if you have renamed your system folder.
    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ /index.php/$1 [L]

    # Checks to see if the user is attempting to access a valid file,
    # such as an image or css document, if this isn't true it sends the
    # request to index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]

</IfModule>

<IfModule !mod_rewrite.c>

    # Without mod_rewrite, route 404's to the front controller
    ErrorDocument 404 /index.php

</IfModule>

【问题讨论】:

    标签: php linux .htaccess codeigniter


    【解决方案1】:

    这有很多原因,但我总是先检查:

    AllowOverride

    检查您的主要 Apache 配置。默认情况下,您的文档根目录的 AllowOverride 指令可能设置为 none。在这种情况下,Apache 将忽略 htaccess 文件。

    http://httpd.apache.org/docs/2.2/mod/core.html#allowoverride

    模块缺失

    因为您的命令包含在 IfModule 语句中。如果您的 Linux 机器没有该模块,则不会执行该命令。

    提示

    要查看是否正在读取 htacess,只需在任何 ifmodule 语句之外的文件顶部添加一些废话,例如“dkdkwei239d”或任何不合法的指令。

    您应该收到 500 服务器错误。如果不是,则 Apache 没有读取 .htaccess 文件。

    如果您确实收到 500 错误,则 Apache 正在读取该文件。

    尝试删除 Ifmodule 语句。如果错误返回,那么您可能缺少重写模块。

    【讨论】:

    • 当我在开头添加这个无意义的字符串 gfgfgfgfgfgfg 时,应用程序崩溃服务器遇到内部错误或配置错误,无法完成您的请求。请联系服务器管理员 webmaster@localhost 并告知他们错误发生的时间,以及您所做的任何可能导致错误的事情。服务器错误日志中可能提供有关此错误的更多信息。 Apache/2.2.22 (Ubuntu) 服务器在 localhost/myproject 端口 49131
    • 所以覆盖将是非常不可能的,因为这是在 linux 服务器上托管之后发生的。然后为了测试这个错误我使用的是本地linux机器,错误是一样的!
    猜你喜欢
    • 2018-10-10
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 2017-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多