将所有请求重写到同一目录中的index.php

时间:2014-02-28 11:06:33

标签: php apache .htaccess mod-rewrite

我希望将所有请求重新写入index.php,因此我使用了这个htaccess代码。

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

在主目录上托管网站时,它可以正常工作。但是假设我将我的站点移动到子目录xyz并将我的所有文件(包括.htacess文件)移动到此目录中。然后,如果我访问http://example.com/xyz/some_page,则请求不会重定向到/xyz/index.php

那么,我怎样才能使这个重写工作在子目录上工作,就像我的情况一样。

更新: 我忘了提及目录xyz,因为在我的情况下可能经常更改。因此,此目录不需要在重写规则

中进行硬编码

2 个答案:

答案 0 :(得分:1)

更改您的基本网址以进行重写

RewriteBase subdir/

或尝试使用完整网址

RewriteBase http://www.examle.com/subdir/

答案 1 :(得分:1)

删除RewriteBase

如果您不需要重写基础 - 只需将其删除即可。基于问题中显示的示例的工作示例将是:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

请注意,第一个重写规则已被删除,因为它在逻辑上等同于RewriteCond %{REQUEST_FILENAME} !-f(不要重写对存在的文件的请求)。

还要考虑删除RewriteCond %{REQUEST_FILENAME} !-d,因为这会阻止将/this/folder/exists等网址发送到index.php。如果Directory listings are enabled但最不相关,则最相关。