apache .htaccess重写root以获取操作

dw1jzc5e  于 7个月前  发布在  Apache
关注(0)|答案(2)|浏览(51)

我有下面的代码,其目的是根据URL中指定的操作将用户引导到不同的functions

$action = isset( $_GET['action'] ) ? $_GET['action'] : "";

$action = strtolower($action);

switch ($action) {
  case 'viewproducts':
    viewProducts();
    break;
  case 'products':
    products();
    break;
  case 'homepage':
    homepage();
    break;
  default:
        header("HTTP/1.0 404 Not Found");
        include_once("404.html");
}

如果用户在索引或/上,我想将其指向homepage

RewriteEngine On
#if not a directory listed above, rewrite the request to ?action=
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^/$ index.php?action=homepage [L,QSA]
#RewriteRule ^(.*)$ index.php?action=$1 [L,QSA]

但是,当在domain.com/上时,开关默认设置。

kmynzznz

kmynzznz1#

这不是.htaccess的问题。这是你的密码我会使用.htaccess

RewriteEngine On
RewriteBase /

## If the request is for a valid directory
RewriteCond %{REQUEST_FILENAME} -d [OR]
## If the request is for a valid file
RewriteCond %{REQUEST_FILENAME} -f [OR]
## If the request is for a valid link
RewriteCond %{REQUEST_FILENAME} -l
## don't do anything
RewriteRule ^ - [L]

RewriteRule ^(.*)$ index.php [L]

所以所有的请求只是直接去index.php,并在您的“路由器”应该是:

$action = isset( $_GET['action'] ) ? $_GET['action'] : "homepage";

因为你设置$action为空字符串,如果它没有指定,所以开关默认值。
PS:只是一个建议。不要构建自己的CMS,使用框架或其他。最好专注于你的产品而不是开发工具。

更新

正如OP所建议的,RewriteRule可以是:

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

然而,在我的例子中,.htaccess来自 HTML5 Boilerplate,所以它经过测试,适合大多数情况(对我来说也一样)。

slmsl1lt

slmsl1lt2#

您可以用途:

RewriteEngine On
RewriteBase /

RewriteRule ^/?$ index.php?action=homepage [L,QSA]

#if not a directory listed above, rewrite the request to ?action=
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?action=$1 [L,QSA]

相关问题