【发布时间】:2017-07-30 10:02:59
【问题描述】:
请注意,这是对我之前提出的问题的重复。然而它最初的措辞很糟糕,并且被编辑了很多次,几乎变成了一个不同的问题,因此我决定提出一个新问题
文件
我有以下文件:
example.dev.conf 虚拟主机文件
这是一个非常简单的 vhost 文件:
<VirtualHost *:80>
ServerName example.dev
ServerAlias *.example.dev
DocumentRoot /var/www/example
<Directory /var/www/example >
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
<VirtualHost *:443>
ServerName example.dev
ServerAlias *.example.dev
DocumentRoot /var/www/example
<Directory /var/www/example >
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
.htaccess
以下文件将所有 url 重定向到 https 等效项,除非它以 /api/ 开头。
它还应该确保所有路由都使用index.php 控制器。
RewriteEngine On
# Handle SSL
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^/api/ [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
问题
这在大多数情况下都有效。
例如http://example.dev/blah 重定向到https://example.dev/blah
但是,对于以/api/ 开头的任何内容,它似乎都无法按预期工作。
例如:http://example.dev/api/blah 重定向到 https://example.dev/index.php,而它根本不应该进行重定向!
请注意,如果我删除 htaccess 文件的最后 3 行,重定向工作正常。
如何复制?
我发现有些人发现很难复制我的问题,并坚持在某处存在其他规则。因此,我决定尽我所能展示我的所有步骤,以便很容易复制:
vagrant init ubuntu/trusty64
vagrant up --provider virtualbox
vagrant ssh
sudo apt-get install apache2
sudo a2enmod rewrite
cd /etc/apache2/sites-available/
sudo touch example.dev.conf
# copy contents of the example.dev.conf vhost file as seen above
sudo a2ensite example.dev.conf
cd /var/www/
sudo mkdir example
sudo chown -R www-data:www-data /var/www/example
sudo chmod 777 -R /var/www/example
cd example
echo "test" > index.php
touch .htaccess
# Copy contents of .htaccess file as seen above
sudo chown -R www-data:www-data /var/www/example
sudo chmod 777 -R /var/www/example
sudo service apache2 restart
【问题讨论】:
标签: apache .htaccess mod-rewrite apache2.4