我已检查过有关.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]
答案 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
)。