这是我的.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的链接。
答案 0 :(得分:23)
您遇到冲突的两个规则,使用的模式是完全相同的,这意味着,除了仅应用于第一个规则的条件之外,这两个规则完全无法区分。 / p>
鉴于此URL:
http://www.site.com/blah
“blah
”是一个页面还是一个用户?无法分辨,因为两个规则的正则表达式模式(^([a-z0-9]+)$
)匹配“blah”。因此,第一个将始终应用,无论。您需要添加一些内容来区分2,例如在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]
答案 1 :(得分:3)
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](下一步)继续向相同条件添加规则 和[L](最后)确定最后一条规则
答案 2 :(得分: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]
答案 3 :(得分: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]
表示继续。