我有两套重写规则。这是虚拟主机:
<VirtualHost *:80>
ServerName datingjapan.co
ServerAlias *.datingjapan.co
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*) http://www.%{HTTP_HOST}$1 [R=301,L]
DocumentRoot /var/www/html/datingjapan.co
</VirtualHost>
这是 .htacess
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>
我一直在尝试将 .htaccess 添加到虚拟主机,以便我可以删除 .htaccess 文件 - 下面是一个示例,但我得到了显示的站点:
<VirtualHost *:80>
ServerName datingjapan.co
ServerAlias *.datingjapan.co
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)$ index.php?/$1
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*) http://www.%{HTTP_HOST}$1 [R=301,L]
DocumentRoot /var/www/html/datingjapan.co
</VirtualHost>
我知道 [L] 表示最后一条匹配的规则,因此我已将其删除,但它仍然不起作用。
我在这里缺少什么?我尝试过颠倒规则。
谢谢
最佳答案
仍然需要
L
因为 Last 标志用于标记每个重写规则的结束。规则的排序也很重要。将您的代码更改为:
<VirtualHost *:80>
ServerName datingjapan.co
ServerAlias *.datingjapan.co
DocumentRoot /var/www/html/datingjapan.co
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*) http://www.%{HTTP_HOST}$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)$ /index.php?/$1 [L,QSA]
</VirtualHost>
关于regex - Apache 多重重写规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17142971/