2017-06-18 63 views
2

中的文件我已经检查了大量有关.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] 

回答

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)。

+1

“防止不必要的迭代” - 或者说 - 不必要的文件系统check_。好的回答+1 – MrWhite

+0

@ user82217是的,已经改变了。很高兴你喜欢它:) – SuperDuperApps

+1

这工作很棒:)也感谢关于'NC'的提示 – PhyCoMath

相关问题