我的根文件夹中有.htaccess
:
根:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?page=$1&%{QUERY_STRING} [NC,L]
因此传入的GET请求来自http://www.example.com/somethingsomething
而不是?page=somethingsomething
。那一切都很好。
但是,在根文件夹中,我有另一个名为/i
的文件夹。我喜欢这个处理另一种类型的请求,如下所示:http://www.example.com/i/somethingsomething
,其结尾实际上意味着http://www.example.com/i/index.php?img=somethingsomething
。问题是根文件夹中的.htaccess
仍在使用中。我需要的是以下内容:
/ I:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?img=$1&%{QUERY_STRING} [NC,L]
,但不知何故排除了根文件夹中的.htaccess
。
这可能吗?
编辑:
尝试在此网站上找到的内容,例如使用RewriteCond %{REQUEST_URI} !^/(i)
和根.htaccess
中的类似内容。
答案 0 :(得分:1)
是的,您可以使用根.htaccess
中的单个规则执行此操作。根.htaccess
始终会被处理,因此您可以使用一条规则来执行此操作。否则它会更复杂,并且根本需要修改/i
的异常。
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/(?:i/)?index\.php$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(i/)?(.*)$ /$1index.php?img=$2 [QSA,NC,L]
使用[QSA]
标志,这是传递任何现有查询字符串的更好方法。不需要RewriteBase
。您可能不需要目录检查,如果没有它,性能会更好。 index.php
检查是为了通过在成功重写后避免另一个文件系统检查来提高性能。
<强>更新强>
抱歉,我没有注意到您传递给index.php
的参数在第二种情况下有不同的名称。 root中的这些规则应该适合您:
RewriteEngine on
RewriteCond %{REQUEST_URI} !=/index.php
RewriteCond %{REQUEST_URI} !^/i/ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?page=$1 [QSA,NC,L]
RewriteCond %{REQUEST_URI} !^/(?:i/)?index\.php$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^i/(.*)$ /i/index.php?img=$1 [QSA,NC,L]