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