.htaccess在子目录中重写,不能在.htaccess的根目录下工作

时间:2016-09-22 15:03:05

标签: php apache .htaccess redirect mod-rewrite

我的域指向根文件夹。在这个文件夹中,我需要有.htaccess,它将重定向到子文件夹。

在根文件夹中我有这个.htaccess:

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} !^/sub/folder/
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.
RewriteRule ^(.*) /sub/folder/$1 [L]

在sub / folder / .htaccess中我有以下几行:

RewriteEngine on
RewriteBase /

ErrorDocument 404 /index.php?action=404

RewriteCond %{REQUEST_URI} ^/image/([^/]+)/(\d+)x(\d+)/([^/]+).(jpg|png)$
RewriteRule (.*) file.php?action=%1&code=%4&w=%2&h=%3 [B,L,QSA]

RewriteCond %{REQUEST_URI} ^/cscard_valid$
RewriteRule (.*) index.php?action=cscardvalid&ajax=true [L,QSA]
..

我不知道为什么重定向不起作用。你能帮我吗? 感谢

3 个答案:

答案 0 :(得分:1)

因为如果您的“子”htaccess位于网络uri /subfolder中,那么/image/cscard_valid的请求就无法触发它。这些是不同的目录。 Apache只扫描列出url的目录中的htaccess文件,不会进入“并行”或“邻居”目录。

例如,对于URL /foo/bar/baz,Apache将检查以下内容:

/foo/.htaccess
/foo/bar/.htaccess
/foo/bar/baz/.htaccess

如果/foo/himom中有.htaccess文件,那就无关紧要了。它不在所请求文件的路径中,因此永远不会被扫描。

答案 1 :(得分:1)

删除子文件夹中的.htaccess,然后将规则添加到您的根目录,如下所示:

RewriteRule ^image/([^/]+)/(\d+)x(\d+)/([^/]+).(jpg|png)$ sub/folder/file.php?action=$1&code=$4&w=$2&h=$3 [B,L,QSA]

答案 2 :(得分:0)

很可能你不需要/ sub / folder /中的.htaccess,只需要root中的.htaccess。它的内容应该如下:

RewriteEngine on
RewriteBase /

RewriteCond %{REQUEST_URI} ^/image/([^/]+)/(\d+)x(\d+)/([^/]+).(jpg|png)$
RewriteRule (.*) sub/folder/file.php?action=$1&code=$4&w=$2&h=$3 [B,L,QSA]

RewriteCond %{REQUEST_URI} ^/cscard_valid$
RewriteRule (.*) sub/folder/index.php?action=cscardvalid&ajax=true [L,QSA]

RewriteRule ^(.*) sub/folder/$1 [L]