我希望将所有请求重新写入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
,因为在我的情况下可能经常更改。因此,此目录不需要在重写规则
答案 0 :(得分:1)
更改您的基本网址以进行重写
RewriteBase subdir/
或尝试使用完整网址
RewriteBase http://www.examle.com/subdir/
答案 1 :(得分:1)
如果您不需要重写基础 - 只需将其删除即可。基于问题中显示的示例的工作示例将是:
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但最不相关,则最相关。