Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.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 不止一条规则_Php_Regex_Apache - Fatal编程技术网

Php 不止一条规则

Php 不止一条规则,php,regex,apache,Php,Regex,Apache,这个想法是根据我包含的php文件获取不同的变量,因此在编程时避免了太多的混乱 <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-l RewriteRule ^([a-zA-Z0-9]+)/([a-z

这个想法是根据我包含的php文件获取不同的变量,因此在编程时避免了太多的混乱

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-l

    RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9+]+)$ index.php?p=$1&produccion=$2 [QSA,L]
    RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9+]+)$ index.php?p=$1&categoria=$2 [QSA,L]
    RewriteRule ^([a-zA-Z0-9]+)/([a-zA-Z0-9+]+)/([a-zA-Z0-9+]+)$ index.php?p=$1&categoria=$2&show=$3 [QSA,L]
</IfModule>

重新启动发动机
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-L
重写规则^([a-zA-Z0-9]+)/([a-zA-Z0-9+])$index.php?p=$1,produccion=$2[QSA,L]
重写规则^([a-zA-Z0-9]+)/([a-zA-Z0-9+])$index.php?p=$1,categoria=$2[QSA,L]
重写规则^([a-zA-Z0-9]+)/([a-zA-Z0-9+])/([a-zA-Z0-9+])$index.php?p=$1,categoria=$2,show=$3[QSA,L]
问题是,当我这样离开它时,它将覆盖以前的
重写规则


我对这个正则表达式和Apache的东西很陌生。

你可以考虑使用<强>只是一个改写器:< /强>

RewriteRule ^(.+)$ index.php?p=$1 [QSA,L]
然后在PHP中解析
$\u GET['p']
变量以确定合适的页面:

$page = (isset($_GET['p'])) ? explode('/', $_GET['p']) : null;
if ($page) {
    if ($page[0] == 'store') {
        if ($page[1] == 'cart') {
            // URL is www.example.com/store/cart
        }
        else if (!isset($page[1]) || empty($page[1])) {
            // URL is www.example.com/store
        }
    }
}
else {
    // URL is www.example.com
}
这对于站点的基础设施来说并不理想。如果你不想把所有的东西都重定向,你也可以考虑对你的改写器更具体。以此为例:

RewriteRule ^(about|faq|signup|contact)(?!\.php)/?(.*)$ /$1.php?page=$2 [QSA,L]

只有当用户访问
example.com/about
、或
/faq
、或
/signup
、或
/contact
时,上述规则才会重定向,并将其重定向到同名的PHP文件。例如,对
/faq/3
的请求将重定向到
/faq.php?page=3

试试这个
重写规则
,它总是要使用一次?是的。因此,如果有人访问www.example.com/store/cart,那么他们将被重定向到/index.php?p=store/cart。然后,
$page[0]
将设置为
存储
$page[1]
将设置为
购物车