链接是文件链接但文件不存在时.htaccess重定向循环

时间:2013-12-13 12:40:11

标签: php .htaccess mod-rewrite

我有这个工作.htaccess:

RewriteEngine On
DirectorySlash On 


RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)$ $1/ [R]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/?]+)$ $1.php

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/?]*)/([^/?]*)$ $1.php?$1=$2

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/?]*)/([^/?]*)/([^/?]*)$ $1.php?$2=$3

问题是,如果我没有任何文件http://mydomain/myfile.extension,它会跳转到无限循环的重定向...有趣的是我知道为什么会这样,但我不知道如何解决它 - 我想关于两个解决方案:

1)解决方法 - 我不喜欢它:添加“不是'。' (点)“进入RewriteRule正则表达式 - 但我不是正则表达式主人,所以我不知道如何添加它(并且仍然不会崩溃当前的那个)

2)更好,但如何? :检查.php文件 - 哪个重定向会导致 - 甚至存在

1 个答案:

答案 0 :(得分:0)

尝试这样的规则:

DirectorySlash On 

RewriteEngine On
RewriteBase /subdir/

## If the request is for a valid directory
RewriteCond %{REQUEST_FILENAME} -d [OR]
## If the request is for a valid file
RewriteCond %{REQUEST_FILENAME} -f
## don't do anything
RewriteRule ^ - [L]

RewriteRule ^([^/]+)$ $1/ [L,R=301]

RewriteCond %{DOCUMENT_ROOT}/subdir/$1.php -f
RewriteRule ^([^/]+)/?$ $1.php [L]

RewriteCond %{DOCUMENT_ROOT}/subdir/$1.php -f
RewriteRule ^([^/]+)/([^/]+)/?$ $1.php?$1=$2 [L,QSA]

RewriteCond %{DOCUMENT_ROOT}/subdir/$1.php -f
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ $1.php?$2=$3 [L,QSA]