我有这个工作.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文件 - 哪个重定向会导致 - 甚至存在
答案 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]