我在Web应用程序的根文件夹中有以下.htaccess:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^\.(.*) [NC]
RewriteRule ^(.*) http://%1/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php?req=%{REQUEST_URI}&%{QUERY_STRING}
这可以正常工作,只有一个例外:如果目录实际存在,则提供该目录,而不是传递给PHP脚本的请求。
因此,如果directory / docs /存在,则将index.htm发送到浏览器,而不存在对目录/ doesnotexist /的请求将被传递给PHP脚本。
我有什么想法可以修改这个,以便所有请求都传递给PHP,无论该位置是否存在?
答案 0 :(得分:1)
您的第二组条件将匹配请求限制为不指向现有文件或现有目录。这就是为什么当你浏览到/docs/
并且目录存在时,规则将不会触发。
要解决这个问题,你需要做的就是摆脱第二次重写条件。这使得它下面的规则触发任何不指向现有文件的请求。实际上,如果您想要将每个请求重定向到PHP脚本,那么也需要消除第一个重写条件。
RewriteCond %{REQUEST_FILENAME} !-f
# RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php?req=%{REQUEST_URI}&%{QUERY_STRING}
请注意,#
取消注释该行,因此mod_rewrite不会将其取消。