Lamp 服务器不显示没有扩展名的文件
Lamp server not showing file without extension
我在 lamp 堆栈中创建了一个虚拟主机,我遇到了一个奇怪的问题。问题是当我打开虚拟主机站点时 www.domain.com 主页加载没有任何问题。
但是当我使用导航栏打开另一个页面时,我得到一个“404 NOT FOUND”,即 www.domain。com/about
但是只要我手动输入文件的扩展名,页面就会加载。
www.domain.com/about.php
我该如何解决这个问题。我正在使用 .htaccess 来隐藏文件的扩展名。
注意:
1) 所有其他本地文件 运行 正确,即我有一个工作正常的 wordpress 站点(这意味着 mysql 数据库没有导致错误)
2) 虚拟主机设置正确,因为启用虚拟主机时终端没有显示任何错误。
但是 wamp 中的虚拟主机在我的 windows 8.1 pro 中没有给我任何类型的问题。
编辑:
.htaccess 中隐藏扩展的代码在我的 windows 电脑上没有任何问题。
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ .php
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ .html
编辑-2
<VirtualHost *:80>
<Directory /var/www/stab-website>
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
allow from all
</Directory>
DocumentRoot "/var/www/stab-website"
ServerName stab-site.com
ServerAlias www.stab-site.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
还是不行。
您需要启用 MultiViews
选项:
<VirtualHost *:80>
<Directory /var/www/htdocs>
Options Indexes FollowSymLinks MultiViews
</Directory>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/var/www/htdocs"
ServerName dummy-host.example.com
ServerAlias www.dummy-host.example.com
</VirtualHost>
这可以在您的 httpd.conf
文件、虚拟主机的配置文件或 .htaccess
文件中完成。
您还应确保 mod_negotiation
模块已启用。这可以通过 运行:
来完成
sudo a2enmod negotiation
您可能还需要验证您的虚拟主机配置是否正确,这可以从终端使用:
apache2ctl -t
之后您需要重新启动服务器:
sudo service apache2 restart
The effect of MultiViews is as follows: if the server receives a
request for /some/dir/foo, if /some/dir has MultiViews enabled, and
/some/dir/foo does not exist, then the server reads the directory
looking for files named foo.*, and effectively fakes up a type map
which names all those files, assigning them the same media types and
content-encodings it would have if the client had asked for one of
them by name. It then chooses the best match to the client's
requirements.
感谢@Cyclone 的帮助
这个 post 帮我解决了这个问题
https://askubuntu.com/questions/233046/how-to-give-my-user-permission-to-add-edit-files-on-local-apache-server
上面的 post 有助于 运行 Apache 服务器作为登录用户。
赋予.htaccess的使用权--
首先,您应该确保您的用户名包含在 www-data 组中。如果没有,您可以将您的用户名添加为 www-data group
sudo adduser $USER www-data
之后,您应该将 /var/www 的所有权更改为您的用户名
sudo chown $USER:www-data -R /var/wwws
并且不要忘记在 apache2.conf
中添加此代码
<Directory /var/www/ProjectRootDirectory>
AllowOverride All
</Directory>
我在 lamp 堆栈中创建了一个虚拟主机,我遇到了一个奇怪的问题。问题是当我打开虚拟主机站点时 www.domain.com 主页加载没有任何问题。
但是当我使用导航栏打开另一个页面时,我得到一个“404 NOT FOUND”,即 www.domain。com/about
但是只要我手动输入文件的扩展名,页面就会加载。 www.domain.com/about.php
我该如何解决这个问题。我正在使用 .htaccess 来隐藏文件的扩展名。
注意: 1) 所有其他本地文件 运行 正确,即我有一个工作正常的 wordpress 站点(这意味着 mysql 数据库没有导致错误)
2) 虚拟主机设置正确,因为启用虚拟主机时终端没有显示任何错误。
但是 wamp 中的虚拟主机在我的 windows 8.1 pro 中没有给我任何类型的问题。
编辑: .htaccess 中隐藏扩展的代码在我的 windows 电脑上没有任何问题。
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ .php
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ .html
编辑-2
<VirtualHost *:80>
<Directory /var/www/stab-website>
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
allow from all
</Directory>
DocumentRoot "/var/www/stab-website"
ServerName stab-site.com
ServerAlias www.stab-site.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
还是不行。
您需要启用 MultiViews
选项:
<VirtualHost *:80>
<Directory /var/www/htdocs>
Options Indexes FollowSymLinks MultiViews
</Directory>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/var/www/htdocs"
ServerName dummy-host.example.com
ServerAlias www.dummy-host.example.com
</VirtualHost>
这可以在您的 httpd.conf
文件、虚拟主机的配置文件或 .htaccess
文件中完成。
您还应确保 mod_negotiation
模块已启用。这可以通过 运行:
sudo a2enmod negotiation
您可能还需要验证您的虚拟主机配置是否正确,这可以从终端使用:
apache2ctl -t
之后您需要重新启动服务器:
sudo service apache2 restart
The effect of MultiViews is as follows: if the server receives a request for /some/dir/foo, if /some/dir has MultiViews enabled, and /some/dir/foo does not exist, then the server reads the directory looking for files named foo.*, and effectively fakes up a type map which names all those files, assigning them the same media types and content-encodings it would have if the client had asked for one of them by name. It then chooses the best match to the client's requirements.
感谢@Cyclone 的帮助
这个 post 帮我解决了这个问题 https://askubuntu.com/questions/233046/how-to-give-my-user-permission-to-add-edit-files-on-local-apache-server
上面的 post 有助于 运行 Apache 服务器作为登录用户。
赋予.htaccess的使用权--
首先,您应该确保您的用户名包含在 www-data 组中。如果没有,您可以将您的用户名添加为 www-data group
sudo adduser $USER www-data
之后,您应该将 /var/www 的所有权更改为您的用户名
sudo chown $USER:www-data -R /var/wwws
并且不要忘记在 apache2.conf
中添加此代码<Directory /var/www/ProjectRootDirectory>
AllowOverride All
</Directory>