Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.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
Php .htaccess在子目录中不工作_Php_Regex_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

Php .htaccess在子目录中不工作

Php .htaccess在子目录中不工作,php,regex,apache,.htaccess,mod-rewrite,Php,Regex,Apache,.htaccess,Mod Rewrite,我的.htaccess文件应该删除url中的.php扩展名,强制使用斜杠,并在需要时指定get值。如果找不到脚本/文件/目录,它会将您重定向到根目录。例如,如果您键入http://127.0.0.1/about-us/它会将您带到http://about-us.php或如果键入http://127.0.0.1/file/delete-avatar/230它重写为http://127.0.0.1/file.php?a=delete-化身&id=230,或者如果键入http://127.0.0.1/

我的.htaccess文件应该删除url中的.php扩展名,强制使用斜杠,并在需要时指定get值。如果找不到脚本/文件/目录,它会将您重定向到根目录。例如,如果您键入
http://127.0.0.1/about-us/
它会将您带到
http://about-us.php
或如果键入
http://127.0.0.1/file/delete-avatar/230
它重写为
http://127.0.0.1/file.php?a=delete-化身&id=230
,或者如果键入
http://127.0.0.1/nu
(其中nu是一个现有目录)它会将您带到
http://127.0.0.1/nu
。但是,当您将脚本放入目录并附加GET值时,.htaccess无法重写并重定向到索引。例如,如果键入
http://127.0.0.1/nu/login/recover-password
不会重写为
http://127.0.0.1/nu/login?a=recover-密码
.My.hta凯西来了

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteBase /     

   # remove php extensions (only for GET method)
   RewriteCond %{THE_REQUEST} ^GET\ /(.+)\.php(?:\?|\s) [NC]
   RewriteCond %{REQUEST_FILENAME} -f
   RewriteRule ^ %1/? [L,R=301]

   # don't touch other existing files/folders
   RewriteCond %{REQUEST_FILENAME} -f [OR]
   RewriteCond %{REQUEST_FILENAME} -d
   RewriteRule ^ - [L]

   # force trailing slash
   RewriteCond %{DOCUMENT_ROOT}/$1\.php -f
   RewriteRule ^(.+)$ $1/ [L,R=301] 

   # rewrite extensionless php files
   RewriteCond %{DOCUMENT_ROOT}/$1.php -f
   RewriteRule ^(.+)/$ $1.php [L]

   #subscribe
   RewriteRule ^([^/]+)/([^/]+)/?$ $1.php?a=$2 [QSA,L]
   RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ $1.php?a=$2&id=$3 [QSA,L]

   # finally, if not found
   RewriteRule ^ index.php [L]
</IfModule>

重新启动发动机
重写基/
#删除php扩展(仅适用于GET方法)
重写cond%{THE_REQUEST}^GET\/(.+)\.php(?:?\124;\ s)[NC]
RewriteCond%{REQUEST_FILENAME}-f
重写规则^1/?[L,R=301]
#不要触摸其他现有文件/文件夹
RewriteCond%{REQUEST_FILENAME}-f[或]
RewriteCond%{REQUEST_FILENAME}-d
重写规则^-[L]
#强制尾部斜杠
重写cond%{DOCUMENT_ROOT}/$1\.php-f
重写规则^(+)$$1/[L,R=301]
#重写无扩展php文件
重写cond%{DOCUMENT_ROOT}/$1.php-f
重写规则^(+)/$$1.php[L]
#订阅
重写规则^([^/]+)/([^/]+)/?$$1.php?a=$2[QSA,L]
重写规则^([^/]+)/([^/]+)/([^/]+)/?$$1.php?a=$2&id=$3[QSA,L]
#最后,如果没有找到
重写规则^index.php[L]

#订阅
行下方插入此新规则:

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

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

是否有
/nu/login.php
文件?是的。该文件存在。@anubhava请查看此文件。您的解决方案在某些情况下失败。例如,我无法访问
http://127.0.0.1/nu/users/edit/myusername
它应该去哪里
http://127.0.0.1/nu/users/edit.php?a=myusername
。其中
nu
是一个现有目录和
users
nu
edit中的另一个目录。php
users
中的一个脚本,因此我的树类似于so/document\u root/nu/users/edit.phpOf。当然,它不会处理该URL,因为此规则适用于
http://127.0.0.1/nu/login/recover-password
这里有一个上午新URL中的e级别。请参阅更新的答案。