Php 不止一条规则
这个想法是根据我包含的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
<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]
将设置为购物车
。