许多目录的重写规则相同

时间:2013-12-10 12:28:55

标签: regex apache .htaccess mod-rewrite url-rewriting

我有一堆网站共享相同的重写规则。

每个网站都拥有自己的域名,拥有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/>

我是重写的新手。有人能指出我如何才能使这个工作?

非常感谢大家提前花时间做这件事。

1 个答案:

答案 0 :(得分:0)

Apache config的重写规则需要前导斜杠。试试这段代码:

<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。