0

这个想法是根据我包含的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>

问题是,当我这样离开时,它会覆盖以前的RewriteRule.

我对这个正则表达式和 apache 真的很陌生。

4

1 回答 1

1

您可以考虑只使用一个 RewriteRule:

RewriteRule ^(.+)$ index.php?p=$1 [QSA,L]

然后在 PHP 中解析$_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
}

这对于您网站的基础架构来说并不完全理想。如果您绝对不希望所有内容都被重定向,您也可以考虑更具体地使用 RewriteRules。以此为例:

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

上面的规则只会在用户访问example.com/about, or /faq, or /signup, or/contact时重定向,并且他们会被重定向到一个同名的 PHP 文件。例如,请求/faq/3将重定向到/faq.php?page=3.

于 2013-09-19T17:29:21.460 回答