如果你想在.htaccess中解决这个问题,你必须定义有效的路由。
让我们假设您的旧应用程序具有以下可能的路由和重定向:
/listing => index.php?shop=listing
/detail => index.php?shop=detail
/cart => index.php?shop=cart
然后你会希望你的.htaccess看起来像这样
RewriteCond %{REQUEST_FILENAME} (listing|detail|cart)
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !\.(css|jpg|png|gif|js|xml)$ [NC]
RewriteRule ^(.*)$ index.php?_shop_=$1 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.php [QSA,L]
如果这行对您的需要来说太简单,您可以利用重写规则中OR标志具有更高优先级的事实,并编写如下内容:
RewriteCond %{REQUEST_FILENAME} ^listing/something$ [OR]
RewriteCond %{REQUEST_FILENAME} ^detail/[complexRegex] [OR]
RewriteCond %{REQUEST_FILENAME} ^cart/...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !\.(css|jpg|png|gif|js|xml)$ [NC]
RewriteRule ^(.*)$ index.php?_shop_=$1 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.php [QSA,L]
如果你想要更高级的东西,你必须在应用程序级别(即在index.php或app.php中)解决,而不是在.htaccess中