MultiViews不能在Ubuntu上运行

我已经打了几个小时的头,我似乎无法得到这个工作。 请帮忙。 我试图让Apache打开PHP文件没有扩展名。 这是我的apache2.conf:

Mutex file:${APACHE_LOCK_DIR} default PidFile ${APACHE_PID_FILE} Timeout 300 KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5 User ${APACHE_RUN_USER} Group ${APACHE_RUN_GROUP} HostnameLookups Off ErrorLog ${APACHE_LOG_DIR}/error.log LogLevel warn IncludeOptional mods-enabled/*.load IncludeOptional mods-enabled/*.conf Include ports.conf <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride Indexes Allow from All Require all granted </Directory> <Directory /var/www/subdomain.example.com/public_html > Options +MultiViews </Directory> AccessFileName .htaccess <FilesMatch "^\.ht"> Require all denied </FilesMatch> IncludeOptional sites-enabled/*.conf 

我有这两个configuration文件启用网站(禁用000-default.conf)..这是第一个,让我们叫它example.com.conf:

 <VirtualHost *:80> ServerName example.com ServerAlias www.example.com ServerAdmin [email protected] DocumentRoot /var/www/example.com/public_html ErrorLog ${APACHE_LOG_DIR}/example.com.error.log CustomLog ${APACHE_LOG_DIR}/exmple.com.access.log combined </VirtualHost> 

并为第二个子域.example.com.conf:

 <VirtualHost *:80> ServerName subdomain.example.com ServerAdmin [email protected] DocumentRoot /var/www/subdomain.example.com/public_html <Directory /var/www/subdomain.example.com/public_html > allow from all AllowOverride All Options FollowSymLinks Options +MultiViews # RewriteCond %{REQUEST_FILENAME} !-d # RewriteCond %{REQUEST_FILENAME}\.php -f # RewriteRule ^(.*)$ $1.php </Directory> ErrorLog ${APACHE_LOG_DIR}/subdomain.example.com.error.log CustomLog ${APACHE_LOG_DIR}/subdomain.example.com.access.log combined </VirtualHost> 

有了这个:

  • example.com/index – works(这是一个html文件)
  • subdomain.example.com – 作品(我得到了我的index.php)
  • subdomian.example.com/index.php – 作品(我得到我的index.php文件)
  • subdomian.example.com/index – 不工作

所以我猜这是我的apache的configuration文件的问题。 。 。 pleeeeease帮助。 我究竟做错了什么?

你需要“MultiviewsMatch Any”吗? 这是因为文件扩展名不像txt / html / etc那样是一个mimetype映射。

这是实现它的一种方式:

 <Directory /var/www/> RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}.htm -f RewriteRule ^(.*)$ $1.htm RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}.html -f RewriteRule ^(.*)$ $1.html RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.*)$ $1.php </Directory> <VirtualHost *:80> ServerName example.com ServerAlias www.example.com ServerAdmin [email protected] DocumentRoot /var/www/example.com/public_html ErrorLog ${APACHE_LOG_DIR}/example.com.error.log CustomLog ${APACHE_LOG_DIR}/exmple.com.access.log combined </VirtualHost> <VirtualHost *:80> ServerName subdomain.example.com ServerAdmin [email protected] DocumentRoot /var/www/subdomain.example.com/public_html ErrorLog ${APACHE_LOG_DIR}/subdomain.example.com.error.log CustomLog ${APACHE_LOG_DIR}/subdomain.example.com.access.log combined </VirtualHost> 
  • 如果要将所有虚拟主机应用到虚拟主机,则需要将重写规则放在虚拟主机之外
  • #是一个注释,所以它禁用后写命令
  • \. 在正则expression式中是逃避的,在它之外是不需要的

你也可以简化一些冗余的代码:

 <Directory /var/www/subdomain.example.com/public_html > Options +MultiViews </Directory> 

 <Directory /var/www/subdomain.example.com/public_html > allow from all AllowOverride All Options FollowSymLinks Options +MultiViews </Directory> 

可以写简单

 <Directory /var/www/subdomain.example.com/public_html > AllowOverride All Options +FollowSymLinks +MultiViews </Directory>