Jump to content

Orçamento para realizar ficheiro .htaccess


msantos00

Recommended Posts

Boa noite,

Após aproximadamente 20 dias de pesquisa e testes, inclusive um artigo aqui no portugal a programar sem qualquer resposta, tento tentado todas as soluções disponíveis neste forum e outros, a realidade é que simplesmente não consigo colocar o url limpo, simples assim.

Já tentei tudo, mesmo tudo, inclusive funções nativas de php, basicamente o resultado foi nulo.

artigo.php?post_id=x

autor.php?name=x

tag.php?name=x

Tudo que possam imaginar foi tentado e testado com resultado nulo, ja tentei o explode, preg_replace e resultado 0, inclusive funções disponíveis aqui no forum e nada o url não mexe.

Até me sinto mal, porque criei um blog com administração, funções, com gestor de paginas, gestor de arquivos, conta cliente um coisa a serio e chego ao .htaccess pareço um menino.

Portanto, aguardo por pm orçamentos para me tratarem disso.

Obrigado.

Link to comment
Share on other sites

Olá, eu não percebo muito disto, mas acho que tás a abordar mal o problema.... acho que devias era gerar os links já url friendly e assim não precisavas de utilizar o htaccess para fazer isso.

Não seria melhor utilizar um link

/artigo/id/1 

ou

/artigo/1 

em vez de usares um link

/artigo.php?id=1
Edited by tuga74

http://www.nova.news

Nova aprende automaticamente o que gostas de ler e mostra os conteúdos que te interessam.

Link to comment
Share on other sites

Olá, eu não percebo muito disto, mas acho que tás a abordar mal o problema.... acho que devias era gerar os links já url friendly e assim não precisavas de utilizar o htaccess para fazer isso.

Não seria melhor utilizar um link

/artigo/id/1 

ou

/artigo/1 

em vez de usares um link

/artigo.php?id=1

Antes de mais, obrigado pela atenção, estás a referir-te a isto:

https://www.portugal-a-programar.pt/topic/50321-routes/page__hl__route

Ou isto :

<?
$artigo = strtolower(mysql_real_escape_string($exibe1['titulo']));
$artigoclean = ereg_replace("[^ 0-9a-zA-Z]", " ", $artigo);
while (strstr($artigoclean, "  ")) {
  $artigoclean = str_replace("  ", " ", $artigoclean);
}
$artigoclean = str_replace(" ", "+", $artigoclean);
if ($artigo != '') {
  header( 'http://localhost/bblog/artigo/'.$artigo );
}
?>

.htaccess presumo q estejas a falar do apache, procura por mod_rewrite (se o q queres dizer por "url limpo" é algo como /artigo/id)

Não sei se aqui no forum posso citar ou referenciar outros blogs/artigos online, mas a verdade e que até livros comprei, mas não consigo aplicar a regra, possivelmente será algum de tipo de "truque" no htaccess.

Embora que com o mesmo código eu tenha consigo criar esse urls mas com smarty o framework, para a loja online (outro projecto meu) mas com php base (sem framework) não consigo.

fica aqui o códgigo que uso na loja via smarty framework.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /onlineshop
RewriteCond %{THE_REQUEST} ^GET\ .*/index\.(php|html?)\ HTTP
RewriteRule ^(.*)index\.(php|html?)$ $1 [R=301,L]
RewriteRule ^.*-d([0-9]+)/.*-c([0-9]+)/pagina-([0-9]+)/?$ index.php?departamento=$1&categoria=$2&pagina=$3 [L]
RewriteRule ^.*-d([0-9]+)/.*-c([0-9]+)/?$ index.php?departamento=$1&categoria=$2 [L]
RewriteRule ^.*-d([0-9]+)/pagina-([0-9]+)/?$ index.php?departamento=$1&pagina=$2 [L]
RewriteRule ^.*-d([0-9]+)/?$ index.php?departamento=$1 [L]
RewriteRule ^pagina-([0-9]+)/?$ index.php?pagina=$1 [L]s
RewriteRule ^.*-p([0-9]+)/?$ index.php?producto=$1 [L]
</IfModule>
Link to comment
Share on other sites

Acho que será mais fácil ajudar se explicares melhor o teu problema.

Para que precisas (ou pensas que precisas) do .htaccess?

O preciso usar o mod_rewrite para artigos, categorias, autores e tags de um blog.

A minha grande dúvida passa pelo seguinte, quando desenvolvi uma loja em Smarty o htaccess funcionou com o código que citei acima, mas se aplicar a função php só em php e mysql já não funciona, ou seja aparece sempre o "?id=".

Aparece assim: http://localhost/bblog/artigo.php?id=3 ,

devia aparecer assim: http://localhost/bblog/artigo/3 tal como na loja online.

A base das pastas é a mesma, o sistema de configuração o mesmo não estou mesmo a perceber o que se esta a passar.

E depois não aparece erros, ou seja, fico sem nenhum ponto de partida para o que poderá ser, a única coisa que consegui ao aplicar o REQUEST_URI, mas aparecia http://localhost/bblog/c://wampp/www/bblog/index.php/artigo.php/3?id=3, e em todas as informações que recorri nunca consegui resolver o problema nem com o mapeamento em .htaccess.

Link to comment
Share on other sites

Vou deixar aqui mais informação do meu código,

uso uma função para mudar o conteudo de titulo para url amigável para evitar os %25 e %2520 (espaços e caracteres especiais).

titulo:

Tutorial: Começar a programar em Swift no Linux

Após função:

tutorial-Começar-a-programar-em-Swift-no-Linux

o problema é sempre o ?id, não sai de forma nenhuma do url.

http://localhost/bblog/artigo.php?titulo=Tutorial-Começar-a-programar-em-Swift-no-Linux

devia ser

http://localhost/bblog/artigo/titulo/Tutorial-Começar-a-programar-em-Swift-no-Linux/

Fica a função que utilizo:

function url_slug($str, $options = array()) {
// Make sure string is in UTF-8 and strip invalid UTF-8 characters
$str = mb_convert_encoding((string)$str, 'UTF-8', mb_list_encodings());

$defaults = array(
 'delimiter' => '-',
 'limit' => null,
 'lowercase' => true,
 'replacements' => array(),
 'transliterate' => false,
);

// Merge options
$options = array_merge($defaults, $options);

$char_map = array(
 // Latin
 'À' => 'A', 'Á' => 'A', 'Â' => 'A', 'Ã' => 'A', 'Ä' => 'A', 'Å' => 'A', 'Æ' => 'AE', 'Ç' => 'C',
 'È' => 'E', 'É' => 'E', 'Ê' => 'E', 'Ë' => 'E', 'Ì' => 'I', 'Í' => 'I', 'Î' => 'I', 'Ï' => 'I',
 'Ð' => 'D', 'Ñ' => 'N', 'Ò' => 'O', 'Ó' => 'O', 'Ô' => 'O', 'Õ' => 'O', 'Ö' => 'O', 'Ő' => 'O',
 'Ø' => 'O', 'Ù' => 'U', 'Ú' => 'U', 'Û' => 'U', 'Ü' => 'U', 'Ű' => 'U', 'Ý' => 'Y', 'Þ' => 'TH',
 'ß' => 'ss',
 'à' => 'a', 'á' => 'a', 'â' => 'a', 'ã' => 'a', 'ä' => 'a', 'å' => 'a', 'æ' => 'ae', 'ç' => 'c',
 'è' => 'e', 'é' => 'e', 'ê' => 'e', 'ë' => 'e', 'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i',
 'ð' => 'd', 'ñ' => 'n', 'ò' => 'o', 'ó' => 'o', 'ô' => 'o', 'õ' => 'o', 'ö' => 'o', 'ő' => 'o',
 'ø' => 'o', 'ù' => 'u', 'ú' => 'u', 'û' => 'u', 'ü' => 'u', 'ű' => 'u', 'ý' => 'y', 'þ' => 'th',
 'ÿ' => 'y',
 // Latin symbols
 '©' => '(c)',
 // Greek
 'A' => 'A', 'B' => 'B', 'Γ' => 'G', 'Δ' => 'D', 'Ε' => 'E', 'Ζ' => 'Z', 'Η' => 'H', 'Θ' => '8',
 'Ι' => 'I', 'Κ' => 'K', 'Λ' => 'L', 'Μ' => 'M', 'Ν' => 'N', 'Ξ' => '3', 'Ο' => 'O', 'Π' => 'P',
 'Ρ' => 'R', 'Σ' => 'S', 'Τ' => 'T', 'Υ' => 'Y', 'Φ' => 'F', 'Χ' => 'X', 'Ψ' => 'PS', 'Ω' => 'W',
 'Ά' => 'A', 'Έ' => 'E', 'Ί' => 'I', 'Ό' => 'O', 'Ύ' => 'Y', 'Ή' => 'H', 'Ώ' => 'W', 'Ϊ' => 'I',
 'Ϋ' => 'Y',
 'a' => 'a', 'b' => 'b', 'γ' => 'g', 'δ' => 'd', 'ε' => 'e', 'ζ' => 'z', 'η' => 'h', 'θ' => '8',
 'ι' => 'i', 'κ' => 'k', 'λ' => 'l', 'μ' => 'm', 'ν' => 'n', 'ξ' => '3', 'ο' => 'o', 'π' => 'p',
 'ρ' => 'r', 'σ' => 's', 'τ' => 't', 'υ' => 'y', 'φ' => 'f', 'χ' => 'x', 'ψ' => 'ps', 'ω' => 'w',
 'ά' => 'a', 'έ' => 'e', 'ί' => 'i', 'ό' => 'o', 'ύ' => 'y', 'ή' => 'h', 'ώ' => 'w', 'ς' => 's',
 'ϊ' => 'i', 'ΰ' => 'y', 'ϋ' => 'y', 'ΐ' => 'i',
 // Turkish
 'Ş' => 'S', 'İ' => 'I', 'Ç' => 'C', 'Ü' => 'U', 'Ö' => 'O', 'Ğ' => 'G',
 'ş' => 's', 'ı' => 'i', 'ç' => 'c', 'ü' => 'u', 'ö' => 'o', 'ğ' => 'g',
 // Russian
 'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D', 'Е' => 'E', 'Ё' => 'Yo', 'Ж' => 'Zh',
 'З' => 'Z', 'И' => 'I', 'Й' => 'J', 'К' => 'K', 'Л' => 'L', 'М' => 'M', 'Н' => 'N', 'О' => 'O',
 'П' => 'P', 'Р' => 'R', 'С' => 'S', 'Т' => 'T', 'У' => 'U', 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'C',
 'Ч' => 'Ch', 'Ш' => 'Sh', 'Щ' => 'Sh', 'Ъ' => '', 'Ы' => 'Y', 'Ь' => '', 'Э' => 'E', 'Ю' => 'Yu',
 'Я' => 'Ya',
 'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'yo', 'ж' => 'zh',
 'з' => 'z', 'и' => 'i', 'й' => 'j', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o',
 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c',
 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sh', 'ъ' => '', 'ы' => 'y', 'ь' => '', 'э' => 'e', 'ю' => 'yu',
 'я' => 'ya',
 // Ukrainian
 'Є' => 'Ye', 'І' => 'I', 'Ї' => 'Yi', 'Ґ' => 'G',
 'є' => 'ye', 'і' => 'i', 'ї' => 'yi', 'ґ' => 'g',
 // Czech
 'Č' => 'C', 'Ď' => 'D', 'Ě' => 'E', 'Ň' => 'N', 'Ř' => 'R', 'Š' => 'S', 'Ť' => 'T', 'Ů' => 'U',
 'Ž' => 'Z',
 'č' => 'c', 'ď' => 'd', 'ě' => 'e', 'ň' => 'n', 'ř' => 'r', 'š' => 's', 'ť' => 't', 'ů' => 'u',
 'ž' => 'z',
 // Polish
 'Ą' => 'A', 'Ć' => 'C', 'Ę' => 'e', 'Ł' => 'L', 'Ń' => 'N', 'Ó' => 'o', 'Ś' => 'S', 'Ź' => 'Z',
 'Ż' => 'Z',
 'ą' => 'a', 'ć' => 'c', 'ę' => 'e', 'ł' => 'l', 'ń' => 'n', 'ó' => 'o', 'ś' => 's', 'ź' => 'z',
 'ż' => 'z',
 // Latvian
 'Ā' => 'A', 'Č' => 'C', 'Ē' => 'E', 'Ģ' => 'G', 'Ī' => 'i', 'Ķ' => 'k', 'Ļ' => 'L', 'Ņ' => 'N',
 'Š' => 'S', 'Ū' => 'u', 'Ž' => 'Z',
 'ā' => 'a', 'č' => 'c', 'ē' => 'e', 'ģ' => 'g', 'ī' => 'i', 'ķ' => 'k', 'ļ' => 'l', 'ņ' => 'n',
 'š' => 's', 'ū' => 'u', 'ž' => 'z'
);

// Make custom replacements
$str = preg_replace(array_keys($options['replacements']), $options['replacements'], $str);

// Transliterate characters to ASCII
if ($options['transliterate']) {
 $str = str_replace(array_keys($char_map), $char_map, $str);
}

// Replace non-alphanumeric characters with our delimiter
$str = preg_replace('/[^\p{L}\p{Nd}]+/u', $options['delimiter'], $str);

// Remove duplicate delimiters
$str = preg_replace('/(' . preg_quote($options['delimiter'], '/') . '){2,}/', '$1', $str);

// Truncate slug to max. characters
$str = mb_substr($str, 0, ($options['limit'] ? $options['limit'] : mb_strlen($str, 'UTF-8')), 'UTF-8');

// Remove delimiter from ends
$str = trim($str, $options['delimiter']);

return $options['lowercase'] ? mb_strtolower($str, 'UTF-8') : $str;
}

e para chamar a função:

<?php
  echo url_slug(
   "".$exibe1['titulo']."" ,
   array(
    'delimiter' => '-',
    'limit' => 300,
    'lowercase' => false,
    'replacements' => array(
	 '/\b(an)\b/i' => 'a',
	 '/\b(example)\b/i' => 'Test'
    )
   ))?>

e o suposta .htaccess

Options +FollowSymLinks
RewriteEngine on
RewriteRule artigo/titulo/(.*)/ artigo.php?titulo=$1
RewriteRule artigo/titulo/(.*) artigo.php?titulo=$1

Fico a guardar.

Link to comment
Share on other sites

O url que è gerado com o url_slug() è correto?

o url_slug() apenas "traduz" o titulo ex: pavavra 2 com o url_slug() fica palavra-2.

fica aqui o código, dentro de um ciclo while.

<a class="btn btn-sm" href="http://localhost/bblog/artigo.php?titulo=
  <?php
  echo url_slug(
   "".$exibe1['titulo']."" ,
   array(
    'delimiter' => '-',
    'limit' => 300,
    'lowercase' => false,
    'replacements' => array(
	 '/\b(an)\b/i' => 'a',
	 '/\b(example)\b/i' => 'Test'
    )
   ))?>
  ">Saiba Mais</a>

a única diferença e que esta função está em php/mysql e na loja está em .tpl mas é o mesmo.

Link to comment
Share on other sites

OK aqui fica a minha última tentativa de ajuda porque sinceramente ainda não percebi o que pretendes fazer...

Se tiveres um request ao server com este url

http://localhost/bblog/artigo/titulo/Tutorial-Começar-a-programar-em-Swift-no-Linux/

Com esta regra no .htaccess

RewriteRule artigo/titulo/(.*) artigo.php?titulo=$1

Vai procurar pela página

http://localhost/bblog/artigo.php?titulo=Tutorial-Começar-a-programar-em-Swift-no-Linux

Se em vez disso estás a tentar gerar nos links pretty urls o htaccess não tem nada a ver

http://www.nova.news

Nova aprende automaticamente o que gostas de ler e mostra os conteúdos que te interessam.

Link to comment
Share on other sites

Agradeço a atenção de todos vós, mas infelizmente nada resolveu.

Hoje contactei uma empresa e já enviei o código, independentemente de códigos php ou jquery o url tem de ser manipulado via .htaccess, falei com a pessoa em questão ele diz que dá, eu tentei e na loja dá e no blog nada, nem com código nem sem código o url não mexe, fica ali o ?titulo= ou ?id= e simplesmente não mexe.

Como todos os artigos que vi estão incompletos, não dá para aprender é tudo muito subjectivo, se eu não sei fazer, sem ver um artigo ou exemplo devidamente documentado nunca vou aprender, e o meu objectivo é aprender fiquei sem menos 150€ mas aprendo.

Eu sou assim, gosto de ver um exemplo a funcionar estudo entendo o funcionamento e depois crio e altero à minha maneira.

Aliais comprei 2 scripts online, apliquei a mesma função e nada igual, pensei que erro do wamp, instalei o xamp nada, meti no lampp em ubuntu exactamente igual até comprei um domínio hoje fiz upload tentei e nada, não tenho conhecimento para mais.

Nos script que comprei por exemplo teria de ser assim:

index.php?page=categories&cat_id=1

o htaccess deveria ser:

RewriteRule ^page/([^/]*)/([^/]*)\.html$ /nBlog/index.php?page=$1&cat_id=$2 [L]

Resultado nenhum, desisti. 😕

Assim que ficar resolvido partilho o código convosco .

Agradeço,

Cumprimentos.

Link to comment
Share on other sites

pesquisem sobre MVC e depois vejam estes tutorials até ao fim! :

https://www.youtube.com/embed/videoseries?list=PLfdtiltiRHWGXVHXX09fxXDi-DqInchFD

digam adeus aos ? & etc...

e o melhor de tudo? é que vocês compreendem o que está lá e podem elaborar coisas fantásticas, GG

Edited by xintect
Link to comment
Share on other sites

  • 4 weeks later...

Olá, msantos.

Se calhar já vou um pouco tarde mas ainda assim: conheces http://www.slimframework.com/ ?

Construo todos os meus projectos php "em cima" desta framework. Muito leve e fácil de usar.

Esta slim framework faz de forma transparente aquilo que precisas, e só precisas de por isto no .htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]

Nota: não tenho qualquer participação no project Slim.

Para aplicações web muito complexas, vale a pena ver Laravel.

Cumprimentos

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. 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.