15

这是我的 .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]

对于第一个它可以正常工作并显示如下: 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>

它有效,但也许是建立链接以利用 htaccess 的更好方法。

4

4 回答 4

29

您有冲突的两条规则,使用的模式完全相同,这意味着除了仅适用于第一条规则的条件外,这两条规则完全无法区分。

鉴于此网址:

http://www.site.com/blah

blah”是页面还是用户?不能说,因为这^([a-z0-9]+)$两个规则的正则表达式模式 ( ) 都匹配“blah”。因此,无论如何,第一个总是会被应用。您需要添加一些内容来区分两者,例如在 URL 中包含“用户”或“页面”:

http://www.site.com/user/blah
http://www.site.com/page/bleh

你的规则看起来像:

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]
于 2013-07-01T20:46:54.103 回答
9
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]

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

于 2017-03-30T18:54:34.677 回答
2

我让它像这样工作。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /domain/index.php/$1 [C]

#second condition and rule
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /domain/subdir/index.php/$1 [L]
于 2016-07-01T05:30:48.180 回答
1

经过大量的试验和错误:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*?\/)*?([a-z\.\-]+)(\d+)\.(bmp|css|cur|gif|ico|jpe?g|js|png|svgz?|webp|webmanifest)$ $1$2$4 [NC]

# Send would-be 404 requests to Craft
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/(favicon\.ico|apple-touch-icon.*\.png)$ [NC]
RewriteRule (.+) index.php?p=$1 [L]
</IfModule>

我收到的提示是[L]表示最后一条规则并[N]表示继续。

于 2018-10-15T15:59:42.503 回答