我有一个名为mydumbwebsite.com/的网站。在我的根文件夹中,有多个文件夹,其中一个是“ stuff”。可通过mydumbwebsite.com/stuff/直接访问此文件夹。我想创建一个.htaccess文件,该文件将重定向进入该子文件夹且仅仅该子文件夹的所有内容,因此这些网址为:
...应该全部重定向到“ stuff”文件夹的index.php文件,即使它们指向的文件/文件夹也存在。
一些其他上下文:尽管我编造了示例,但我在本地主机上遇到了此问题。我有许多不同的项目,我不希望一个项目的.htaccess干扰其他项目。我尝试了this,但是它一直将我重定向到xampp主页:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php [QSA,L]
我尝试将其更改为此,但是不能涵盖所有实例,例如nr。 2、3和4:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ /stuff/index.php [QSA,L]
答案 0 :(得分:2)
您需要删除条件!-d
和!-f
,它们表示“不要在现有文件和目录上应用规则”。您还需要删除RewriteBase /
。
RewriteEngine On
RewriteRule ^(.+)$ index.php [QSA,L]
文件应位于/suff/.htaccess
下。
以下规则也对我有用:
RewriteEngine On
RewriteRule ^ index.php [L]
和
RewriteEngine On
RewriteRule ^ index.php [END]
关于您的评论:
通常,我将创建一个public
文件夹,并将应直接访问的所有内容(public/css/
,public/js
,public/img
等)放入其中。然后将其列入白名单:
RewriteEngine On
RewriteRule ^public/ - [END] # allow direct access on public folder
RewriteRule ^ index.php [END] # anything else will be directed to index.php
您当然可以用相同的方式将多个目录列入白名单:
RewriteEngine On
RewriteRule ^css/ - [END]
RewriteRule ^img/ - [END]
RewriteRule ^js/ - [END]
RewriteRule ^ index.php [END]
或者类似您在评论中建议的内容:
RewriteRule ^(scripts|styles|morefoldernames)($|/) - [L]
答案 1 :(得分:0)
已经很晚了,所以我的大脑可能对此感到困惑,但是可以肯定的是,您只是希望将东西中的所有内容都重定向到index.php,而不管是不是。
然后,只要URL中包含“ / stuff /”,以下内容就可以使用。我想您也不必担心查询字符串等,如果是这样,则需要将下面的index.php修改为index.php?$ 1,并将标志修改为[QSA,NC,L]。 / p>
RewriteEngine On
RewriteRule ^/stuff/?$ /stuff/index.php [NC,L]
检查您的根.htaccess文件中是否有“ RewriteOptions InheritDown”行,这样就应覆盖每个子文件夹的.htaccess文件。
答案 2 :(得分:0)
尝试一下。
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/stuff/(.+)$ /stuff/index.php [L]