1

.htaccess我想为根目录和管理目录使用一个文件。

在尝试拥有干净的 URL 时,我想admin/index.php在管理员位于 URI 中时使用该文件。否则使用根目录index.php

这就是我所拥有的,它非常适合第一个变量(例如 localhost/admin/users),但是如果我放置第二个变量(例如 localhost/admin/users/add_user)会导致 404。

请帮助或简化,我正在拔头发...

RewriteEngine on

# Remove trailing '/'
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ /$1 [R,L]

RewriteRule ^admin/?$ /admin/index.php
RewriteRule ^admin/([a-zA-Z0-9-]+)/?$ /admin/index.php?controller=$1 [QSA]
RewriteRule ^admin/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/?$ /admin/index.php?controller=$1&method=$2 [QSA]
RewriteRule ^admin/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/?$ /admin/index.php?controller=$1&method=$2&id=$3 [L,QSA]

RewriteRule ^([a-zA-Z0-9-]+)/?$ /index.php?controller=$1 [QSA]
RewriteRule ^([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/?$ /index.php?controller=$1&method=$2 [QSA]
RewriteRule ^([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+)/?$ /index.php?controller=$1&method=$2&id=$3 [QSA]
4

1 回答 1

0

localhost/admin/users/add_user不起作用的原因是因为您是用于捕获add_user分组的正则表达式是([a-zA-Z0-9-]+). 请注意,在匹配的字符集中,_不是其中之一。这就是为什么不应用规则的原因,因为正则表达式不匹配。您可以尝试使其更通用:

RewriteRule ^admin/?$ /admin/index.php
RewriteRule ^admin/([^/]+)/?$ /admin/index.php?controller=$1 [QSA]
RewriteRule ^admin/([^/]+)/([^/]+)/?$ /admin/index.php?controller=$1&method=$2 [QSA]
RewriteRule ^admin/([^/]+)/([^/]+)/([^/]+)/?$ /admin/index.php?controller=$1&method=$2&id=$3 [L,QSA]

RewriteRule ^([^/]+)/?$ /index.php?controller=$1 [QSA]
RewriteRule ^([^/]+)/([^/]+)/?$ /index.php?controller=$1&method=$2 [QSA]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ /index.php?controller=$1&method=$2&id=$3 [QSA]

本质上,将所有的替换([a-zA-Z0-9-]+)([^/]+).

于 2013-04-14T19:39:31.577 回答