Это потому, что вы используете относительные пути вместо абсолютные пути для всех ваших HTML ссылки (изображения, JavaScript, CSS, HREF ссылки).
Собственно, ваши правила создают виртуальные каталоги.
Вот почему я удивлен dummy.com/mode/
(с завершающей косой чертой) также работает.
Допустим, у вас есть CSS ссылки, способ
<link rel="stylesheet" type="text/css" href="css/style.css">
Для всех ваших примеров, вот определение пути
dummy.com/mode
->/css/style.css
dummy.com/mode/
->/mode/css/style.css
dummy.com/mode/user
->/mode/css/style.css
dummy.com/mode/user/
->/mode/user/css/style.css
Вы можете увидеть сейчас проблема?
Чтобы избежать такого поведения, используйте абсолютный путь
<link rel="stylesheet" type="text/css" href="/css/style.css">
Или, если вы не хотите, чтобы изменить все ваши HTML ссылки, вы можете добавить эту строку после <head>
HTML тега
<base href="/">
Примечание 1: предполагается абсолютный путь, что все было в корневой папке.
Примечание 2: Вы должны добавить RewriteBase
в вашем Htaccess (чтобы избежать такой же проблемы с виртуальными каталогами)
Options +FollowSymLinks
RewriteEngine On
RewriteBase/
RewriteRule ^([\w-]+)/([\w-]+)/?$ index.php?mode=$1&user=$2 [L]
RewriteRule ^([\w-]+)/?$ index.php?mode=$1 [L]
Примечание 3: вы должны избегать /?
в конце ваших правил (которые означает, что /
не является обязательным), поскольку он создает 2 разных URL-адреса с одинаковым контентом (это называется дублированным контентом, и это плохо для поисковых систем).
Сделайте выбор: с косой чертой или без нее, но не с обоими.
Джастин, ты золотой! Хорошо написанный и понятный пост! –