Дружеские Url, не теряя стилей css/js/imágenes

У меня есть слишком пространный веб сайт издавать унифицированный указатель ресурса стилей css и файлы js, imágenes он стоил бы мне слишком много времени.

Я реализую доказательства работая в localhost

localhost/project/index.php

Унифицированные указатели ресурса дружеский, который я желаю:

localhost/project/index/

Если пользователь изменяет унифицированные указатели ресурса таким образом: localhost/project/index

redireccionar в: localhost/project/index/

Redireccionar любой унифицированные указатели ресурса, измененный без бруска localhost/project/online/video/hd/free в унифицированные указатели ресурса с бруском в конце концов localhost/project/online/video/hd/free/

Унифицированных указателей ресурса простой

localhost/project/online.php

Показывать таким образом:

localhost/project/online/video/hd/free/

Я это попробовал с этими Примерами: .htaccess

Заметь: в этих первых примерах .htaccess стили css, и файлы js, imágenes они появляются без какой-либо проблемы.

#Eliminar la extensión php/html
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php
#RewriteRule ^([a-zA-Z0-9-/]+)$ index.php

RewriteRule ^online-video-en-hd-gratis$ online.php [L,NC,QSA]

Результат:

http://www.example.com/index
http://www.example.com/online-video-en-hd-gratis

Проблема состоит в том, чтобы использовать брусок / в конце концов или добавочные некоторые /../ использовав бруски теряются стили css, между другими файлами js, imágenes.

Пример один: (добавляя брусок в конце концов /)

http://www.example.com/index/

Пример два: (добавляя несколько брусков /)

RewriteEngine on
RewriteRule ^online/video/hd/aventuras/$ online.php [L,NC,QSA]

Результат:

http://www.example.com/online/video/hd/aventuras/

Важно:

Я наблюдал этот веб сайт http://crazycafe.net/demos/seo/ и Ваш исходный код, стили css он держится таким образом: <link href="css/bootstrap.min.css" rel="stylesheet" type="text/css"> не добавляя унифицированного указателя ресурса абсолютная к стилям css и Ваши файлы js и imagenes они грузят без проблемы.

Я нашел этот вопрос в Стакк Оверфлов в Inlges, как сохранения стилей CSS.

Одни из Ваших примеров он был:

RewriteRule ^images/(.+)?$ images/$1 [NC,L]
RewriteRule ^js/(.+)?$ js/$1 [NC,L]
RewriteRule ^topnav/(.+)?$ topnav/$1 [NC,L]
RewriteRule ^common-style\.css$ common-style.css
RewriteRule ^jquery\.js$ jquery.js
RewriteRule ^script/js/(.+)?$ script/$1 [NC,L] 

Но действительно я не понимаю очень хорошо секреты .htaccess

Мой каталог папка с файлами:

assets/css/style.css
assets/js/app.js
assets/fonts/icons/image.png
assets/fonts/ttf/roboto.ttf
assets/img/system/image.png
assets/img/logo.png

Сейчас мой вопрос?

Существует возможность исправлять эти ошибки прямо с файла .htaccess, не будучи должен менять маршрут файлов css, js, imágenes в (абсолютный) маршрут.

Я надеюсь, что этого вопроса не считается слишком много пространная, издает мой вопрос рекомендациям MCVE

4
задан 23.05.2017, 15:39
0 ответов

Решение могло бы состоять в том, чтобы пересылать все то, что существовало бы в подкаталогах последнего уровня в вышеупомянутые файлы прямо, их вместо того, чтобы стараться получать Ваших реальных маршрутов (которые производят использование брусков в дружеских унифицированных указателях ресурса), или посылать их в PHP (если ты используешь характерное правило перенаправления).

Это правила .htaccess который ты должен использовать, чтобы обнаруживать любой маршрут "assets", что остался с каталогом так называемым "css", "js", "fonts" или "img":

# Activamos mod_rewrite
RewriteEngine on

# Definimos la ruta base, por facilidad, una única vez
SetEnvIf RUTA_BASE ^(.*)$ RUTA_BASE=/project/

# Aquí nos evitamos comprobar que sea un archivo (agrego comprobación
# para detectar también directorio) en cada conjunto de reglas
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.*)$ $1 [QSA,L]

# Obtenemos todo lo que vaya tras "assets/"
RewriteCond %{REQUEST_URI} assets/(.+)$
# Y éstos coinciden con un archivo existente..
RewriteCond %{DOCUMENT_ROOT}%{ENV:RUTA_BASE}assets/%1 -f
# Entonces (si se cumplen todas las condiciones) redirigimos (R)
# y dejamos de evaluar el resto de reglas (L)
RewriteRule ^(.*)$ %{ENV:RUTA_BASE}assets/%1 [L,R]

# Tu/s regla/s
RewriteRule ^online-video-en-hd-gratis/?$ online.php [L,NC,QSA]
RewriteRule ^online/video/hd/free/?$ online.php [L,NC,QSA]

Я сделал следующие доказательства, чтобы подтверждать Ваше правильное функционирование:

  • Унифицированный указатель ресурса http://localhost/project/online/video/hd/free/ согласись на рукописный шрифт php так называемо online.php.
  • Унифицированный указатель ресурса http://localhost/project/online/video/hd/free/assets/css/style.css спровоцируй отправление заголовка Location: http://localhost/project/assets/css/style.css который он пересылает в браузер в существующий ресурс.

Осложнились правила из-за того, что содержались в произвольном каталоге. Они могли бы быть набитыми вручную в месте, которое было необходимо, чтобы для облегчать миграцию или изменение каталога в будущем, ты можешь определять легко базовый маршрут в начале .htaccess, так ты это избегаешь быть должным менять на некоторые места файла (и, возможно, забывать какого-то изменения).

Если бы правила были в корне, все было бы более легким (и на этом основывались мои предыдущие правила) потому что мы использовали переменную %{DOCUMENT_ROOT} не добавляя ничего добавочного. Мы могли бы использовать %{ENV:BASE}, но в перенаправлении также мы были бы должны добавлять эту же самую цепь, и там уже у нас нет никакой переменной окружения индейца-апачиа, который мог помогать нам (или по крайней мере я не знаю ее).

Я надеюсь, что сейчас решение ты функционирует правильно.


Мне забывал второй выбор, хотя он может производить фальшивые позитивы, потому что я не могу (я не умею) подтверждать существование файла, но чтобы приуменьшать их, я делаю более строгим правило:

# Activamos mod_rewrite
RewriteEngine on

# Seleccionamos el directorio base para el RewriteRule
RewriteBase /project/

# Aquí nos evitamos comprobar que sea un archivo (agrego comprobación
# para detectar también directorio) en cada conjunto de reglas
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.*)$ $1 [QSA,L]

# Obtenemos todo lo que vaya tras "assets/" y subdirectorios previstos
RewriteCond %{REQUEST_URI} assets/(css|fonts|js|img)/(.+)$
# Entonces (si se cumplen todas las condiciones) redirigimos (R)
# y dejamos de evaluar el resto de reglas (L)
RewriteRule ^(.*)$ assets/%1/%2 [L,R]

# Tu/s regla/s
RewriteRule ^online-video-en-hd-gratis/?$ online.php [L,NC,QSA]
RewriteRule ^online/video/hd/free/?$ online.php [L,NC,QSA]
5
ответ дан 03.12.2019, 17:52
  • 1
    Комментарии не должны быть использованными для распространенных дискуссий; эта conversació n был , перемещенной в чат . –  07.01.2017, 16:50
  • 2
    @OscarGarcia Друг я реализовал доказательства сейчас на сервере, но ahí оно не функционирует унифицированных указателей ресурса , как оно функционирует правильно в localhost, которые я должен изменять в .htaccess для того, чтобы оно функционировало на дружелюбном сервере. –  07.01.2017, 18:18
  • 3
    ¿ Qué у него один из другого есть различного? ¿ Он позволяет тебе использовать .htaccess? ¿ У него включенные mod_rewrite есть? ¿ Измени базовый маршрут? –  07.01.2017, 18:39
  • 4
    @OscarGarcia, если друг, если он позволяет уже сделанный доказательства с другим có я говорю .htaccess, но что должен помещать в базовом маршруте например я suponí в который это было имя домена примера example.com, но оно не функционирует или я болен. –  08.01.2017, 00:31
  • 5
    Это маршрут где está твой pá gina поселенная внутри домена. Например, в http://localhost/project/index.php serí в /project/, в http://www.tupagina.com/app/chachiweb/index.php serí в /app/chachiweb/. –  08.01.2017, 00:42