更新时间:2022-10-15 23:34:14
我发现,使用。*
在重写规则过于笼统。我更倾向于使用特定的字符类:
重写规则^([A-ZA-Z0-9 _-] +)/ $的index.php?abrir = $ 1
重写规则^(〔一个 - 杂 - Z0-9 _-] +)/([一 - 杂 - Z0-9 _-] +)/([一 - 杂 - Z0-9 _-] +)/?$的index.php? abrir = $ 1安培; ID = $ 2及pagina = $ 3
这不重写,在这一个点被忽略的任何要求,因此具体的文件名(/styles/my.css,/images/example.jpg)。 ?另外,我想补充 /
允许可选尾随斜线,但这是一个个人的preference: - )
I'm using:
RewriteRule ^(.*)$ index.php?abrir=$1
RewriteRule ^(.*)/(.*)/(.*)$ index.php?abrir=$1&id=$2&pagina=$3
and I have the image link:
/data_livro/capa_livro/af58e898f91509b.jpg
How I can add a exception for show the image? Its broke...
My full .htaccess:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)$ index.php?abrir=$1
RewriteRule ^([^/]+)/([^/]+)/([^/]+)$ index.php?abrir=$1&id=$2&pagina=$3
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]
ErrorDocument 400 index.php
ErrorDocument 401 index.php
ErrorDocument 403 index.php
ErrorDocument 404 index.php
ErrorDocument 504 index.php
ErrorDocument 505 index.php
DirectoryIndex index.php
I find that using .*
in a rewrite rule is too general. I tend to use more specific character classes:
RewriteRule ^([a-zA-Z0-9_-]+)/?$ index.php?abrir=$1
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/?$ index.php?abrir=$1&id=$2&pagina=$3
This doesn't rewrite any request with a dot in it, so specific file names (/styles/my.css, /images/example.jpg) get ignored. Also, I like to add /?
to allow an optional trailing slash, but that's a personal preference :-).