Jump to content
  • 0

.htaccess настройка


li4e
 Share

Question

Всем привет. Прошу помощи. Пытаюсь сделать seo friendly сайт на angularjs.

Собственно вопрос.

Есть участок кода настроек для nginx
 

if ($args ~ "_escaped_fragment_=(.*)") {    rewrite ^ /snapshot${uri};}		

Как можно написать аналогичный участок в мой .htaccess файл для apache.

 

Заранее спасибо.

 

Мой файл .htaccess

<IfModule mod_rewrite.c>    Options +FollowSymlinks    RewriteEngine On    # Don't rewrite files or directories    RewriteCond %{REQUEST_FILENAME} -f [OR]    RewriteCond %{REQUEST_FILENAME} -d    RewriteRule ^ - [L]    # Rewrite everything else to index.html to allow html5 state links    RewriteRule ^ index.html [L]</IfModule>
Edited by li4e
Link to comment
Share on other sites

19 answers to this question

Recommended Posts

  • 0

Нашел решение.
 

<IfModule mod_rewrite.c>    Options +FollowSymlinks    RewriteEngine On    RewriteCond %{QUERY_STRING} ^_escaped_fragment_=(.*)$    RewriteCond %{REQUEST_URI} !"/static/"        RewriteRule ^(.*)$ /static/index.php [R=302,L]    # Don't rewrite files or directories    RewriteCond %{REQUEST_FILENAME} -f [OR]    RewriteCond %{REQUEST_FILENAME} -d    RewriteRule ^ - [L]    # Rewrite everything else to index.html to allow html5 state links    RewriteRule ^ index.html [L]</IfModule>

Но еще не все, ишу решение как передать адрес страницы в виде get параметров.

Link to comment
Share on other sites

  • 0

Вот пример, переделайте под себя: 

RewriteEngine onRewriteBase /# Досье пользователя.RewriteRule ^users/([0-9]+)\.html$	userinfo.php?user_id=$1# Список всех пользователейRewriteRule ^users/?$			    users.php?%{QUERY_STRING}# Новости общим спискомRewriteRule ^news/?$			    news.php# Новости по разделамRewriteRule ^news/([a-z_]+)/?$		news.php?cat=$1# Страница одной новостиRewriteRule ^news/([0-9]+).html$	news.php?id=$1
Link to comment
Share on other sites

  • 0

adfw вы не так поняли. Ссылки у меня и так выглядят таким образом, blog/23, /about и т.д.

Сейчас же мне нужно в случае если гугл бот заходит на сайт и видит мета тег

<meta name="fragment" content="!" />

То он заново запрашивает страницу но с get параметром 

?_escaped_fragment_=

И поэтому если есть этот параметр я отправляю клиента в папку static. Но загвоздка вот в чем. Я  не знаю как передать информацию о открытой странице, например при запросе страницы http://site.ru/blog/23бот перенаправляется в http://site.ru/static/index.php(скрипт который отдает статичные страницы для ботов и краулеров) но мне нужно как-то передать информацию о странице, например в виде get параметров view=blog и id=23. Но как это сделать средствами htaccess понятия не имею.

Link to comment
Share on other sites

  • 0

Options +FollowSymlinks

RewriteEngine On

RewriteCond %{QUERY_STRING} ^_escaped_fragment_=(.*)$

RewriteCond %{REQUEST_URI} !"/static/"

RewriteRule ^([a-z_]+)/([a-z_]+)/?$ /static/index.php?view=$1&id=$2

RewriteCond %{REQUEST_FILENAME} -f [OR]

RewriteCond %{REQUEST_FILENAME} -d

RewriteRule ^ - [L]

RewriteRule ^ index.html [L]

Edited by afdw
Link to comment
Share on other sites

  • 0

Может так?

RewriteRule ^/([a-z_]+)/([a-z_]+)/?$			/static/index.php?view=$1&id=$2

Что то не хочет. 

Ощущение что в правиле Rewrite что-то не то

Текущая полная настройка 

Options +FollowSymlinksRewriteEngine OnRewriteCond %{QUERY_STRING} ^_escaped_fragment_=(.*)$RewriteCond %{REQUEST_URI} !"/static/"    RewriteRule ^/([a-z_]+)/([a-z_]+)/?$			/static/index.php?view=$1&id=$2RewriteCond %{REQUEST_FILENAME} -f [OR]RewriteCond %{REQUEST_FILENAME} -d    RewriteRule ^ 	 	 	 	 	- [L]    RewriteRule ^		 	 	 	index.html [L]
Link to comment
Share on other sites

  • 0

 

Может так?

RewriteRule ^/([a-z_]+)/([a-z_]+)/?$			/static/index.php?view=$1&id=$2

Что то не хочет. 

Ощущение что в правиле Rewrite что-то не то

Текущая полная настройка 

Options +FollowSymlinksRewriteEngine OnRewriteCond %{QUERY_STRING} ^_escaped_fragment_=(.*)$RewriteCond %{REQUEST_URI} !"/static/"    RewriteRule ^/([a-z_]+)/([a-z_]+)/?$			/static/index.php?view=$1&id=$2RewriteCond %{REQUEST_FILENAME} -f [OR]RewriteCond %{REQUEST_FILENAME} -d    RewriteRule ^ 	 	 	 	 	- [L]    RewriteRule ^		 	 	 	index.html [L]

Смотрите: адрес - /blog/23/. Под данное регулярное выражение он подходит, я проверил.

QEdfSAY.png

Но может быть адрес не тот? Проверьте.

Edited by afdw
Link to comment
Share on other sites

  • 0

Смотрите: адрес - /blog/23/. Под данное регулярное выражение он подходит, я проверил. Но может быть адрес не тот? Проверьте.

 

Однако да. В моем случае адрес /blog/23/ не актуальный, так как в этом случае средствами angular идет редирект на /blog

А актуальный /blog/23 без слеша

А нельзя как то более универсально сделать? Чтобы и на главной если будет параметр, чтобы редиректил, но просто без параметров получается?

Может действительно проще сделать главную страничку на php и обрабатывать запрос на нем?

Edited by li4e
Link to comment
Share on other sites

  • 0

 

Тогда я не понимаю в чем может быть дело

Вот полный адрес который не перекидывает в static

gmveOJ3fdJJgra.png

 

RewriteRule ^/([a-z_]+)/([a-z_]+)/?			/static/index.php?view=$1&id=$2

 

Не выходит. Все равно спасибо за потраченное время. Попробую реализовать на php.

Link to comment
Share on other sites

  • 0

 

 

Тогда я не понимаю в чем может быть дело

Вот полный адрес который не перекидывает в static

gmveOJ3fdJJgra.png

 

RewriteRule ^/([a-z_]+)/([a-z_]+)/?			/static/index.php?view=$1&id=$2

 

Не выходит. Все равно спасибо за потраченное время. Попробую реализовать на php.

 

Ааа, я понял. Вот:

RewriteRule ^/([a-z_]+)/([0-9]+)/?			/static/index.php?view=$1&id=$2
Link to comment
Share on other sites

  • 0

Сделал все довольно просто на php

В основном файле просто проверку на объявление переменной и редирект с адресом

 

if(isset($_GET['_escaped_fragment_'])) {    header('Location: static/index.php?str='.$_SERVER['REQUEST_URI']);}

Затем в скрипте обработчике заношу нужные параметры в массив, очищая не нужные. 

if(isset($_GET['str'])) {    $str = explode('?',$_GET['str'])[0];    $str = !is_array($str) && $str[0] === '/' ? substr($str,1) : $str;    $str = !is_array($str) && $str[strlen($str)-1] === '/' ? substr($str,0,-1) : $str;    $str = explode('/',$str);    var_dump($str);}
Link to comment
Share on other sites

  • 0

С самого начала и нужно было на php делать :). Возможно лучше - всё же адрес в переменной str  шифровать

ну и при разборе можно пользоваться http://www.php.su/parse_url

  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy