.htaccess 在 Windows 7 上被 Apache 2.4.10 忽略
.htaccess ignored on Windows 7 with Apache 2.4.10
我们的一个开发环境使用 Windows 7(使用 Apache 2.4.10)。我已经设置了 mod_rewrite,并创建了一个虚拟主机来指向我的 project
(可以在 project.local
上访问),但是 .htaccess
无法正常工作。当我转到 project.local/css/styles.css
(这是一个现有的文件夹和文件)时,一切正常。但是当我尝试访问像 project.local/account/login
这样重写的 URL 时,我看到一个 404 页面,并且请求未按照 .htaccess
.[=16 中定义的规则映射到 index.php
=]
如果我故意写错 .htaccess
文件内容并尝试访问 project.local
或 project.local/css/styles.css
之类的现有文件,我会收到内部服务器错误(如预期的那样),但是当我访问project.local/account/login
,404错误继续,也就是说.htaccess
被忽略了
未找到错误日志。
C:/xampp/apache/conf/httpd.conf
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
DocumentRoot "C:/xampp/htdocs"
<Directory "C:/xampp/htdocs">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
LoadModule rewrite_module modules/mod_rewrite.so
C:/xampp/apache/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin webmaster@project.local
DocumentRoot "C:/xampp/htdocs/project/webroot"
ServerName project.local
ServerAlias project.local
ErrorLog "logs/project.local-error.log"
CustomLog "logs/project.local-access.log" common
</VirtualHost>
C:/xampp/htdocs/project/webroot/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
你能看出哪里不对吗?我花了将近一天的时间没有成功。
您正在 VirtualHost 文件中声明不同的文档根目录。这可能会导致一些问题。
尝试将您的 VirtualHost 更改为此,然后重新启动 Apache 服务。然后检查你的重写规则。
<VirtualHost *:80>
ServerAdmin webmaster@project.local
DocumentRoot "C:/xampp/htdocs/project/webroot"
ServerName project.local
ServerAlias project.local
ErrorLog "logs/project.local-error.log"
CustomLog "logs/project.local-access.log" common
<Directory "C:/xampp/htdocs/project/webroot">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
或者您可以尝试更改您的 rewritebase。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /project/webroot
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
在 C:/xampp/apache/conf/extra/
内部,一些别名与我的应用程序路径冲突。我已经删除了这些不必要的别名,一切正常!
<IfModule alias_module>
Alias /account "C:/xampp/account-system/htdocs"
[...]
</IfModule>
谢谢!
我们的一个开发环境使用 Windows 7(使用 Apache 2.4.10)。我已经设置了 mod_rewrite,并创建了一个虚拟主机来指向我的 project
(可以在 project.local
上访问),但是 .htaccess
无法正常工作。当我转到 project.local/css/styles.css
(这是一个现有的文件夹和文件)时,一切正常。但是当我尝试访问像 project.local/account/login
这样重写的 URL 时,我看到一个 404 页面,并且请求未按照 .htaccess
.[=16 中定义的规则映射到 index.php
=]
如果我故意写错 .htaccess
文件内容并尝试访问 project.local
或 project.local/css/styles.css
之类的现有文件,我会收到内部服务器错误(如预期的那样),但是当我访问project.local/account/login
,404错误继续,也就是说.htaccess
被忽略了
未找到错误日志。
C:/xampp/apache/conf/httpd.conf
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
DocumentRoot "C:/xampp/htdocs"
<Directory "C:/xampp/htdocs">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
LoadModule rewrite_module modules/mod_rewrite.so
C:/xampp/apache/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin webmaster@project.local
DocumentRoot "C:/xampp/htdocs/project/webroot"
ServerName project.local
ServerAlias project.local
ErrorLog "logs/project.local-error.log"
CustomLog "logs/project.local-access.log" common
</VirtualHost>
C:/xampp/htdocs/project/webroot/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
你能看出哪里不对吗?我花了将近一天的时间没有成功。
您正在 VirtualHost 文件中声明不同的文档根目录。这可能会导致一些问题。
尝试将您的 VirtualHost 更改为此,然后重新启动 Apache 服务。然后检查你的重写规则。
<VirtualHost *:80>
ServerAdmin webmaster@project.local
DocumentRoot "C:/xampp/htdocs/project/webroot"
ServerName project.local
ServerAlias project.local
ErrorLog "logs/project.local-error.log"
CustomLog "logs/project.local-access.log" common
<Directory "C:/xampp/htdocs/project/webroot">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
或者您可以尝试更改您的 rewritebase。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /project/webroot
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
在 C:/xampp/apache/conf/extra/
内部,一些别名与我的应用程序路径冲突。我已经删除了这些不必要的别名,一切正常!
<IfModule alias_module>
Alias /account "C:/xampp/account-system/htdocs"
[...]
</IfModule>
谢谢!