2011-03-06 150 views
30

我试图让我的测试环境工作的网站,但不知何故,它不工作。我可以加载正常的索引页面,但是当我想访问/页面/测试时会抛出一个错误,指出该页面不存在。我的日志说:Apache服务器忽略.htaccess

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

这实际上是真实的,但它应该得到我的页面控制器代替并加载测试方法。

我的.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.* /$0 [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/$0 [PT] 

我的虚拟主机配置是这样的:

<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> 

我使用的Gentoo。

任何帮助,将不胜感激。

回答

61
<Directory "/home/page_url/www/"> 
    AllowOverride None 

AllowOverride None禁止被读取.htaccess文件。见the manual

此外,请记住.htaccess文件没有什么不可思议的。对于没有完全访问服务器配置,这是一个粗略的解决方法。他们只是一个Apache配置。如果您可以完全访问服务器配置,则应该将这样的内容放入虚拟主机配置中,而不是.htaccess文件。

+1

请务必在'/ etc/apache2/sites-available'和'/etc/apache2/apache2.conf'中检查'AllowOverride None'的配置。不这样做让我无法在整个会议中显示我的网页的工作版本! – 2015-03-27 17:53:49

+6

'AllowOverride All'修复了问题 – 2015-04-11 18:41:37

4

有一点要记住,如果你的重写规则仍然不工作:

还要激活ModRewrite模块!这在Ubuntu中不是默认的。

+0

这是我的问题。我启用了该模块,但我的.htaccess文件丢失了'RewriteEngine on'。这就是我搞乱从另一个配置复制/粘贴! – vaindil 2016-04-28 14:03:14

10

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

我到达这里是因为我以为我的服务器忽略了我自己的htaccess /服务器配置文件。但是,事实证明我有mod_expires和mod_rewrite禁用。在我看到这两个人之后,所有事情都应该重新开始。

您可以通过执行这些命令,使他们:

sudo a2enmod expires 
sudo a2enmod rewrite 

然后重新启动Apache

service apache2 restart 

希望这有助于有人出来!

+0

谢谢。国防部重写是不够的,我不得不添加到期。 – 2016-05-17 11:07:29

+0

你是最受欢迎的! – 2016-05-18 03:00:25

+1

我希望我能+1000这个。谢谢!!!! – ingernet 2017-07-19 22:18:54