我有很多网站共享相同的重写规则。
每个网站都有自己的域,在Apache中有自己的vhost,还有自己的带有公共文件的文件夹。文件夹使用/var/www/<domain>/
模式,即/var/www/mydomain.com/
我的旧设置在每个网站的文件夹中都包含单独的.htaccess文件。然而,由于性能原因,新系统禁用了.htaccess,我需要将重写移到配置文件中。
我不想创建一堆具有完全相同重写规则的<Directory>
块。我想创建一个单独的块,将规则应用于/var/www/
目录中的所有网站。
我尝试了以下代码:
<Directory /var/www/*>
RewriteEngine On
ErrorDocument 404 /404redirect.php
RewriteRule ^image.php/$ /image.php [L]
RewriteRule ^trial/$ /trial.php [L]
RewriteCond %{REQUEST_URI} !.(gif|jpg|jpeg|png|js|css|png|sqlite)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/$ /player.php [L]
</Directory>
除了正确使用404redirect.php的ErrorDocument
之外,什么都不起作用。其余所有规则都不起,并产生404错误。
如果我直接使用这个代码,也就是说,在<Directory /var/www/mydomain.com/>
中,同样的代码也能很好地工作。
我是重写方面的新手。有人能给我指一下我该怎么做吗?
非常感谢大家提前花时间讨论这个问题。
Apache配置的重写规则需要前导斜杠。试试这个代码:
<Directory /var/www/*>
RewriteEngine On
ErrorDocument 404 /404redirect.php
RewriteRule ^/image.php/$ /image.php [L]
RewriteRule ^/trial/$ /trial.php [L]
RewriteCond %{REQUEST_URI} !.(gif|jpg|jpeg|png|js|css|png|sqlite)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ /player.php [L]
</Directory>
不要忘记在更改后重新启动Apache。