我的想法是根据我所包含的 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的东西。
答案 0 :(得分: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
,/faq
,/signup
或/contact
时重定向,并且会被重定向到PHP文件同名。例如,对/faq/3
的请求将重定向到/faq.php?page=3
。