2014-09-11 3 views
2

Так что проблема в том, что, когда я использую только первый параметр, страница работает как шарм, но когда я использую второй, мой CSS становится беспорядочным (выравнивание текста -> слева).htaccess потянув текст влево

Options +FollowSymLinks 
RewriteEngine On 
RewriteRule ^([\w-]+)/([\w-]+)/?$ index.php?mode=$1&user=$2 [L] 
RewriteRule ^([\w-]+)/?$ index.php?mode=$1 [L] 

dummy.com/mode
dummy.com/mode/
Works!

dummy.com/mode/user
dummy.com/mode/user/
Выравнивает текст налево!

ответ

2

Это потому, что вы используете относительные пути вместо абсолютные пути для всех ваших 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-адреса с одинаковым контентом (это называется дублированным контентом, и это плохо для поисковых систем).

Сделайте выбор: с косой чертой или без нее, но не с обоими.

+0

Джастин, ты золотой! Хорошо написанный и понятный пост! –

0

Вот как я это сделал. В основном, когда вы вытащите URL ресурсов, проверка будет выполнять пустую проверку и ничего не выведет.

У меня была схожая проблема, когда мой URL-адрес стиля направлял меня на страницу обработчика php, так что это то, что я предполагаю, происходит с вами.

RewriteCond %{REQUEST_FILENAME} !-d # avoiding directory 
#RewriteCond %{REQUEST_FILENAME} !-f # not checking if is a file, commented out 
# must be located before all other rules 
RewriteRule ^([.+/]*.*[.+].+)$ - [L] # file must be skipped 

RewriteRule ^([\w-]+)/([\w-]+)/?$ index.php?mode=$1&user=$2 [L] 
RewriteRule ^([\w-]+)/?$ index.php?mode=$1 [L] 
Смежные вопросы