多个htaccess重写规则

Cat*_*vei 8 .htaccess mod-rewrite

这是我的.htaccess文件的代码

Options -Indexes
RewriteEngine On
RewriteCond %(REQUEST_FILENAME) !-f
RewriteCond %(REQUEST_FILENAME) !-d
RewriteRule ^([a-z0-9]+)$ /profile.php?username=$1 [L]
RewriteRule ^([a-z0-9]+)$ /display.php?page=$1 [L]
Run Code Online (Sandbox Code Playgroud)

对于第一个它正常工作,并显示如下: www.site.com/user

第二个不起作用,通常显示如下www.site.com/display.php?page=10.我想显示这样的页面www.site.com/article我尝试了不同的东西而没有结果.请告诉我如何使用多个规则.另外请给我一个关于如何在php中使用这些功能的建议,因为我觉得我做的事情并不是很好.我使用此规则的PHP代码是:

<p><a class="button" href="/<?php echo $user_data['username']; ?>"> Profile</a></p>
Run Code Online (Sandbox Code Playgroud)

它有效,但也许是一个更好的方式来建立一个利用htaccess的链接.

Jon*_*Lin 23

您遇到冲突的两个规则,使用的模式完全相同,这意味着,除了仅应用于第一个规则的条件之外,这两个规则完全无法区分.

鉴于此URL:

http://www.site.com/blah
Run Code Online (Sandbox Code Playgroud)

是" blah"页面还是用户?无法分辨,因为^([a-z0-9]+)$两个规则的正则表达式模式()匹配"blah".所以,无论如何,第一个都会被应用.您需要添加一些内容来区分2,例如在URL中包含"用户"或"页面":

http://www.site.com/user/blah
http://www.site.com/page/bleh
Run Code Online (Sandbox Code Playgroud)

你的规则看起来像:

Options -Indexes
RewriteEngine On

RewriteCond %(REQUEST_FILENAME) !-f
RewriteCond %(REQUEST_FILENAME) !-d
RewriteRule ^user/([a-z0-9]+)$ /profile.php?username=$1 [L]

RewriteCond %(REQUEST_FILENAME) !-f
RewriteCond %(REQUEST_FILENAME) !-d
RewriteRule ^page/([a-z0-9]+)$ /display.php?page=$1 [L]
Run Code Online (Sandbox Code Playgroud)


小智 6

Options -Indexes
RewriteEngine On

RewriteCond %(REQUEST_FILENAME) !-f
RewriteCond %(REQUEST_FILENAME) !-d
RewriteRule ^user/([a-z0-9]+)$ /profile.php?username=$1 [N]
RewriteRule ^page/([a-z0-9]+)$ /display.php?page=$1 [L]
Run Code Online (Sandbox Code Playgroud)

使用 [N](下一个)继续向相同条件添加规则,使用 [L](最后一个)来标识最后一个规则