在同一目录中重写对index.php的所有请求
我希望所有的请求都被重写为index.php,所以我使用了这个htaccess代码在同一目录中重写对index.php的所有请求,php,apache,.htaccess,mod-rewrite,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,并将所
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
,因为在我的情况下,目录可能会频繁更改。因此,此目录不需要在重写规则中硬编码更改重写的基本url
RewriteBase subdir/
或者尝试使用完整的url
RewriteBase http://www.examle.com/subdir/
卸下底座
如果您不需要重写库,只需将其删除即可。以问题中所示为基础的工作示例如下:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
请注意,第一个重写规则已被删除,因为它在逻辑上等同于RewriteCond%{REQUEST_FILENAME}-f
(不要重写对现有文件的请求)
考虑删除
RewriteCond%{REQUEST\u FILENAME}-d
,因为这样可以防止像/this/folder/exists这样的URL被发送到index.php。如果不需要,则最相关。@AD7six抱歉,我正在使用此更新的.htaccess规则。我贴错了earlier@AD7six你提供的链接对我有用。你能解释一下这两条线的区别吗RewriteRule^index.php[L]
和RewriteRule。index.php[L]
。顺便说一句,谢谢你的回答。他们基本上是一样的。第一个匹配url的开头(不管url是什么),并重写为index.php;第二个匹配url的第一个字符(不管该字符是什么-它将是“/”),并重写为index.php。抱歉,我忘了提到目录xyz,因为在我的情况下,它可能会频繁更改。所以,这个目录不需要在重写规则中硬编码,我还有一个类似的问题对不起,我的听力很差