Apache多重写规则

Ada*_*dam 4 apache .htaccess mod-rewrite virtualhost

我有两套重写规则.这是虚拟主机:

<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>
Run Code Online (Sandbox Code Playgroud)

这就是.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>
Run Code Online (Sandbox Code Playgroud)

我一直在尝试将.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>
Run Code Online (Sandbox Code Playgroud)

我理解[L]意味着要匹配的最后一条规则,所以我删除了它,但它仍然不起作用.

我在这里错过了什么?我试过扭转规则.

谢谢

anu*_*ava 9

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>
Run Code Online (Sandbox Code Playgroud)