我遇到这种情况,我需要先匹配数字才能匹配任何其他内容(其他参数包含字符),但我使用的规则不起作用并打破我的页面,即使我正在特别是它应该首先匹配数字([0-9]+
)
例如,这是优先事项:
http://example.com/page/1
在此之前:
http://example.com/page/create
第一个显然会使用除第二个之外的其他参数。没有重写任何东西,它可能看起来像这样:
http://example.com/page.php?action=show&id=1
和
http://example.com/page.php?action=create
因此,从重写的角度来看,URL看起来非常相似,但与参数一起使用时则不然。
所以在我的实际情况中,我有这些规则:
RewriteCond {REQUEST_FILENAME} !-f
RewriteCond {REQUEST_FILENAME} !-d
RewriteRule ^(.+)/([0-9]+)$ page.php?uri=$1&id=$2 [QSA,L]
RewriteCond {REQUEST_FILENAME} !-f
RewriteCond {REQUEST_FILENAME} !-d
RewriteRule ^(.+)/(.+)$ page.php?uri=$1&action=$2 [QSA,L]
RewriteCond {REQUEST_FILENAME} !-f
RewriteCond {REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ page.php?uri=$1 [QSA,L]
但是当我按照特定的顺序放置它们时,它总是匹配第一次重写,即使我不包含数字。
基本上,我需要确保当URI包含数字时,我需要将其重写为其他内容(id=
),如果它还有其他数字,则应重写为{{1 }}
我怎样才能做到这一点?
答案 0 :(得分:1)
您可以在DOCUMENT_ROOT/.htaccess
文件中使用此代码:
RewriteEngine On
RewriteBase /
# skip all files and directories from rewrite rules below
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]
RewriteRule ^([^/]+)/([0-9]+)/?$ $1.php?action=show&id=$2 [QSA,L]
RewriteRule ^([^/]+)/([^/]+)/?$ $1.php?action=$2 [QSA,L]