将所有网址(包括无路径)重定向到子目录

时间:2017-06-18 20:36:38

标签: apache .htaccess redirect mod-rewrite

我已检查过有关.htaccess重定向的大量现有答案。但是他们都没有帮助过我。

我想要完成的是将所有请求网址重定向到/api/init.php。但是我到目前为止我的索引页www.example.com只是因为缺少index.php文件而给我一个文件列表,而每个带路径的url请求都在工作。

如何使用.htaccess完成此操作,而不必在目标网页上列出目录列表?

据我所知:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /api/init.php?path=$1 [NC,L,QSA]

1 个答案:

答案 0 :(得分:2)

您的站点根目录是一个目录,因此该规则排除了现有目录。您可以做的只是排除现有文件,并允许PHP脚本处理现有目录。像这样:

RewriteEngine on
RewriteCond %{REQUEST_URI} !=/api/init.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /api/init.php?path=$1 [L,QSA]

我删除了NC标记,因为它不需要。我添加了一个条件来防止不必要的文件系统检查。

您不必在URL参数中传递路径,因为您可以从PHP中的$_SERVER['REQUEST_URI']获取它(与mod_rewrite中的REQUEST_URI不同,在PHP中它总是有原始的URI)。如果你想这样做,那么你的规则变得简单明了:

RewriteEngine on
RewriteCond %{REQUEST_URI} !=/api/init.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ /api/init.php [L]

因为查询字符串只会在不受影响的情况下传递(因此不需要QSA)。