Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.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_Apache_.htaccess_Mod Rewrite - Fatal编程技术网

Php htaccess重写规则不再工作

Php htaccess重写规则不再工作,php,apache,.htaccess,mod-rewrite,Php,Apache,.htaccess,Mod Rewrite,今天早些时候,我使用了以下代码: RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.* - [L] RewriteRule ^(.*) index.php?p=$1 现在,我尝试通过更改最后一行来扩展代码: RewriteEngine On RewriteBase / RewriteCond %{REQUE

今天早些时候,我使用了以下代码:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.* - [L]
RewriteRule ^(.*) index.php?p=$1
现在,我尝试通过更改最后一行来扩展代码:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.* - [L]
RewriteRule ^(.*)/(.*)/(.*)/ index.php?p=$1&sub1=$2&sub3=$3
但现在它不再工作了,它只是尝试将我指向我请求的目录,而不是重写,然后404,因为目录当然不存在

还包括:

RewriteRule ^/(.*)/(.*)/(.*)/ index.php?p=$1&sub1=$2&sub3=$3
不起作用

有人吗

再次提前感谢:)

我建议使用:

RewriteRule ^(.*)$ index.php [L]
然后在index.php上,您可以使用:

$p = explode("/", $_SERVER['REQUEST_URI']);
然后,您可以访问$p[1]、$p[2]等。

您的第一个
(.*)
可能会占用您的整个路径,导致它在末尾查找3个斜杠,因此您需要延迟匹配以避免:

RewriteRule ^(.*?)/(.*?)/(.*?)/ index.php?p=$1&sub1=$2&sub3=$3
虽然就我个人而言,我不会盲目地接受所有角色,但我会做一些类似的事情(取决于您的确切需求…):


这将只允许在路径名中使用单词字符和减号字符。

您的系统中是否有此.htaccess或任何其他.htaccess中的其他规则?除非您有其他规则或代码执行外部重定向,否则此规则无法执行外部重定向。如果您将
index.php
用作路由器(获取所有请求,index.php决定如何处理),那么rybo的答案可能是最好的解决方案。请记住,在每个目录上下文中,例如.htaccess,正则表达式匹配的部分从不以/开头。如果未设置某个指令,尾部斜杠有时会自动从URL中剥离,这将使您的规则不匹配。您可以将最后一个斜杠与
/? (零或一个斜杠)谢谢!当你努力从htaccess代码中提取一些东西时,你会忘记这些简单的解决方案。
RewriteRule ^([\w-]+)/([\w-]+)/([\w-]+)/ index.php?p=$1&sub1=$2&sub3=$3