php Apache 服务器忽略 .htaccess

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/5210820/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-25 20:38:25  来源:igfitidea点击:

Apache server ignores .htaccess

php.htaccesskohana-3gentoo

提问by Rene Terstegen

I'm trying to get a website working on my test environment, but somehow it is not working. I can load the normal index page, but when I want to access /page/test it throws an error saying the page does not exists. My log says:

我试图让一个网站在我的测试环境中运行,但不知何故它不起作用。我可以加载正常的索引页面,但是当我想访问 /page/test 时,它会抛出一个错误,指出该页面不存在。我的日志说:

File does not exist: /home/page_url/www/page

File does not exist: /home/page_url/www/page

Which is in fact true, but it should got to my Page controller instead and load the test method.

这实际上是正确的,但它应该转到我的 Page 控制器并加载测试方法。

My .htaccess looks like:

我的 .htaccess 看起来像:

# Turn on URL rewriting
RewriteEngine On

# Installation directory
RewriteBase /

# Protect hidden files from being viewed
<Files .*>
    Order Deny,Allow
    Deny From All
</Files>

# Protect application and system files from being viewed
RewriteRule ^(?:application|modules|system)\b.* /
<VirtualHost *:80>
    ServerName page_url
    Include /etc/apache2/vhosts.d/vhco.include
    DocumentRoot "/home/page_url/www/"

    # Logging
    CustomLog /var/log/apache2/access_log common
    ErrorLog /var/log/apache2/error_log

    # This should be changed to whatever you set DocumentRoot to.
    <Directory "/home/page_url/www/">
        # Possible values for the Options directive are "None", "All",
        # or any combination of:
        #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
        #
        # Note that "MultiViews" must be named *explicitly* --- "Options All"
        # doesn't give it to you.
        #
        # The Options directive is both complicated and important.  Please see
        # http://httpd.apache.org/docs/2.2/mod/core.html#options
        # for more information.
        Options Indexes FollowSymLinks

        # AllowOverride controls what directives may be placed in .htaccess files.
        # It can be "All", "None", or any combination of the keywords:
        #   Options FileInfo AuthConfig Limit
        AllowOverride All

        # Controls who can get stuff from this server.
        Order allow,deny
        Allow from All 
    </Directory>

    <IfModule alias_module>
        # Redirect: Allows you to tell clients about documents that used to
        # exist in your server's namespace, but do not anymore. The client
        # will make a new request for the document at its new location.
        # Example:
        #   Redirect permanent /foo http://www.example.com/bar

        # Alias: Maps web paths into filesystem paths and is used to
        # access content that does not live under the DocumentRoot.
        # Example:
        #   Alias /webpath /full/filesystem/path
        #
        # If you include a trailing / on /webpath then the server will
        # require it to be present in the URL.  You will also likely
        # need to provide a <Directory> section to allow access to
        # the filesystem path.

        # ScriptAlias: This controls which directories contain server scripts.
        # ScriptAliases are essentially the same as Aliases, except that
        # documents in the target directory are treated as applications and
        # run by the server when requested rather than as documents sent to the
        # client.  The same rules about trailing "/" apply to ScriptAlias
        # directives as to Alias.
        ScriptAlias /cgi-bin/ "/var/www/localhost/cgi-bin/"
    </IfModule>

    # "/var/www/localhost/cgi-bin" should be changed to whatever your ScriptAliased
    # CGI directory exists, if you have that configured.
    <Directory "/home/page_url/www/">
        AllowOverride None
        Options None
        Order allow,deny
        Allow from All
    </Directory>
</VirtualHost>
[L] # Allow any files or directories that exist to be displayed directly RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # Rewrite all other URLs to index.php/URL RewriteRule .* index.php/
<Directory "/home/page_url/www/">
    AllowOverride None
[PT]

My vhost configuration looks like:

我的虚拟主机配置如下:

sudo a2enmod expires
sudo a2enmod rewrite

I'm using Gentoo.

我正在使用 Gentoo。

Any help would be appreciated.

任何帮助,将不胜感激。

回答by Jim

service apache2 restart

This AllowOverride Nonedisables .htaccessfiles from being read. See the manual.

AllowOverride None将禁止.htaccess读取文件。请参阅手册

Also, please bear in mind that there's nothing magical about .htaccessfiles. They are a crude workaround for not having full access to the server configuration. All they are is a piece of Apache configuration. If you have full access to the server configuration, you should be putting stuff like this into the vhost configuration, not .htaccessfiles.

另外,请记住,.htaccess文件没有什么神奇之处。它们是无法完全访问服务器配置的粗略解决方法。它们只是一块 Apache 配置。如果您拥有对服务器配置的完全访问权限,您应该将这样的内容放入 vhost 配置中,而不是.htaccess文件中。

回答by Mohamed Elgharabawy

As Jim said, if you have full access to your server, you should just put everything in the server configuration files.

正如 Jim 所说,如果您拥有对服务器的完全访问权限,则应该将所有内容都放在服务器配置文件中。

I reached here because I thought my server was ignoring my own htaccess/server configuration files. However, it turned out I had mod_expires and mod_rewrite disabled. After I had those two looked into, everything was working again as it should.

我到达这里是因为我认为我的服务器忽略了我自己的 htaccess/server 配置文件。但是,事实证明我禁用了 mod_expires 和 mod_rewrite。在我调查了这两个之后,一切都恢复正常了。

You can enable them by executing these commands:

您可以通过执行以下命令来启用它们:

##代码##

Then restart apache

然后重启apache

##代码##

Hope this helps someone out there!

希望这可以帮助那里的人!

回答by Michael

One thing to remember if your rewrite rules still don't work:

如果您的重写规则仍然不起作用,请记住一件事:

Also activate the ModRewrite module! It is not by default in Ubuntu.

同时激活 ModRewrite 模块!它在 Ubuntu 中不是默认的。

See other answer hereon how to do that.

在此处查看有关如何执行此操作的其他答案