Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 从重写中排除所有文件(NGINX到APACHE迁移)_Html_Apache_.htaccess_Redirect_Rewrite - Fatal编程技术网

Html 从重写中排除所有文件(NGINX到APACHE迁移)

Html 从重写中排除所有文件(NGINX到APACHE迁移),html,apache,.htaccess,redirect,rewrite,Html,Apache,.htaccess,Redirect,Rewrite,我的URL结构如下 http://www.example.com/folder/index.php?dir=dir1 能够从 http://www.example.com/folder/dir1 同时将第一个URL重定向到第二个,我在“文件夹”中的htaccess是 Options +FollowSymLinks RewriteEngine On RewriteBase /folder RewriteCond %{ENV:REDIRECT_STATUS} 200 RewriteRule

我的URL结构如下

http://www.example.com/folder/index.php?dir=dir1
能够从

http://www.example.com/folder/dir1
同时将第一个URL重定向到第二个,我在“文件夹”中的htaccess是

Options +FollowSymLinks 

RewriteEngine On
RewriteBase /folder

RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule .* - [L]

RewriteCond %{QUERY_STRING} ^dir=(.*)$ [NC]
RewriteRule ^ %1? [L,R=301,NE]

RewriteRule ^(.+)/? index.php?dir=$1 [L,QSA]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} -d

RewriteRule ^(.*)$ index.php?dir=$1 [L,QSA]
重定向和重写一直工作得很好,直到最近我从NGINX切换回APACHE。问题是它现在也在重写我不想要的文件扩展名!我如何才能只将其应用于目录并从中排除所有文件?

解决了它!:

实际上必须加上

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} -d
在第一次重写之前

因此,htaccess看起来像:

Options +FollowSymLinks 

RewriteEngine On
RewriteBase /folder

RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule .* - [L]

RewriteCond %{QUERY_STRING}  ^dir=(.*)$ [NC]
RewriteRule ^ %1? [L,R=301,NE]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} -d

RewriteRule ^(.+)/? index.php?dir=$1 [L,QSA]

从标题中删除[已解决],将解决方案作为答案发布,并将其标记为已接受。这就是网站的工作原理:第一篇帖子包含问题,后面的帖子就是答案。完成!昨天我试过了,但在某些情况下,我无法回答自己的问题!在创建答案48小时后,您可以将您的答案标记为已接受,以便将来的读者可以看到发布的答案确实解决了问题。有关这方面的更多信息,请参阅meta: