动态 .htaccess 规则 - 重定向 root

Dynamic .htaccess rule - redirect root

我需要一些帮助来将静态 .htaccess 规则转换为动态规则。这是规则的定义:

#Redirect the request of file inside folder 'agencias/pagina_agencia/' to the base root URL
RewriteBase /
RewriteCond %{HTTP_HOST} ^www.avantitecnologiati.com.br
RewriteRule ^teste2 agencias/pagina_agencia/teste2.php [L,QSA]

每当有人请求页面时:[www.avantitecnologiati.com.br/teste2] htaccess 规则会自动读取位于以下路径的名为“teste2.php”的文件:[www.avantitecnologiati.com.br/agencias/pagina_agencia/teste2.php] 一切正常吧?

不,我有两个问题;(

  1. 每次我在名为“agencias/pagina_agencia/”的文件夹中添加一个新文件时,我都需要创建一个新行,例如:
RewriteRule ^teste3 agencias/pagina_agencia/teste3.php [L,QSA]

这不起作用,因为我要在文件夹“目录”中创建 10k 个文件...

  1. 如果用户直接请求[www.avantitecnologiati.com.br/agencias/pagina_agencia/teste2],需要重定向到页面[www.avantitecnologiati.com.br/teste2],不会显示真实位置...

感谢您花时间阅读我的问题;)

完整的 HTACCESS 代码

RewriteEngine On
RewriteCond %{SERVER_PORT} 443
RewriteRule ^(.*)$ avantitecnologiati.com.br [R=301,L]

RewriteBase /
RewriteCond %{HTTP_HOST} ^www.avantitecnologiati.com.br
RewriteRule ^teste2 agencias/pagina_agencia/teste2.php [L,QSA]
RewriteRule ^teste3 agencias/pagina_agencia/teste3.php [L,QSA]

#Hide and Redirect Extension
RewriteEngine on 
RewriteCond %{THE_REQUEST} ^[A-Z]+\s.+\.php\sHTTP/.+
RewriteRule ^(.+)\.php$ / [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ .php [NC,L]

<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/shtml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
</IfModule>

#Custom Error Page
ErrorDocument 404 http://www.avantitecnologiati.com.br/

我在尝试使用 arkascha 规则时收到 302 错误,当我请求 url 时:http://www.avantitecnologiati.com.br/ 它找不到文件 ;(

这可能就是您要找的:

RewriteEngine on
RewriteRule ^/?directory/([^/]+)\.php$ / [R=301,L]
RewriteCond %{REQUEST_URI} !^/directory/
RewriteRule ^ /directory%{REQUEST_URI}.php [L]

最好从 R=302 临时 重定向开始,然后只将其更改为 R=301 永久 一切正常后重定向。这可以防止讨厌的缓存问题...

在您的站点根目录 .htaccess 中像这样(参见内嵌评论):

RewriteEngine On

# external redirect rule to remove /agencias/pagina_agencia/ from URLs
RewriteCond %{THE_REQUEST} \s/+agencias/pagina_agencia/(\S*)\sHTTP [NC]
RewriteRule ^ /%1 [L,R=301]

#Hide and Redirect Extension
RewriteCond %{THE_REQUEST} ^[A-Z]+\s.+\.php\sHTTP
RewriteRule ^(.+)\.php$ / [R=301,L]

# internal rewrite from root to /agencias/pagina_agencia/
RewriteCond %{HTTP_HOST} avantitecnologiati [NC]
RewriteCond %{DOCUMENT_ROOT}/agencias/pagina_agencia/.php -f
RewriteRule ^([\w-]+)/?$ agencias/pagina_agencia/.php [L]

# add .php extension
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ .php [L]

关于在 HTML 中包含资源的相对 URL 的注意事项:

您可能会遇到人们在切换到漂亮的 URL 方案时遇到的最常见问题,即使用相对路径时找不到资源。简单的解决方案是在 css、js、图像文件中使用绝对路径而不是相对路径。这意味着您必须确保这些文件的路径以 http:// 或斜杠 /.

开头

否则您可以将其添加到您页面 HTML 的 <head> 标签下方:<base href="/" /> 这样每个 相对 URL 是从该基础 URL 解析的,而不是从当前页面的 URL.