【问题标题】:htaccess - change file dir with filterhtaccess - 使用过滤器更改文件目录
【发布时间】:2021-08-07 03:40:54
【问题描述】:

如果请求 uri 不包含 api 或列表,我目前正在尝试制作 htaccess 以在 new/ 中查找文件。我试图做这样的事情,但它显示 403 错误。有没有更简单的过滤方法,或者?

RewriteEngine on 
RewriteCond %{REQUEST_URI} /api/ [NC]
RewriteCond %{REQUEST_URI} /list/ [NC]
RewriteRule ^/(.*)$/ new/$1 [L, R]

完整的htaccess代码

#remove html file extension
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html [NC,L]

#remove php file extension
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [NC,L] 

#set max post size
php_value memory_limit 2048M
php_value max_execution_time 3000
php_value max_input_time 6000
php_value post_max_size 800M
php_value upload_max_filesize 200M

#Caching schema
<FilesMatch "\.(png|svg|css|eot|ttf|woff|woff2|otf|js|css)$">
Header set Cache-Control "public, max-age=86400000"
</FilesMatch>

DirectoryIndex index.html

#Custom 404 errors
ErrorDocument 404 /404.html

#Prevent viewing of .htaccess file
<Files .htaccess>
order allow,deny
deny from all
</Files>

<Files error_log>
order allow,deny
deny from all
</Files>

#Prevent directory listings
Options All -Indexes

【问题讨论】:

  • new/ 目录中有 .htaccess 吗?
  • 不,我没有新的/
  • 好的,你能提供完整的 .htaccess 吗
  • @anubhava 你在这里

标签: .htaccess filter cpanel


【解决方案1】:

您可以在站点根目录 .htaccess 中尝试这些规则:

RewriteEngine On 

# redirect to /new if not /api, /list, /new and file exists in /new
RewriteCond %{THE_REQUEST} !\s/+(new|api|list)/ [NC]
RewriteCond %{DOCUMENT_ROOT}/new/$0 -f
RewriteRule .* /new/$0 [L,R=301,NE]

## remaining rules go below this line ##

# remove html file extension
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.*?)/?$ $1.html [L]

# remove php file extension
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [L] 

请务必在清除浏览器缓存或从新浏览器测试后对其进行测试。

【讨论】:

    【解决方案2】:

    编辑:使用 OP 的完整 htaccess 文件,请尝试以下操作。

    #remove html file extension
    RewriteEngine on 
    ##For external redirect rule.
    RewriteCond %{THE_REQUEST} !\s/(?:api|list).*\s [NC]
    RewriteRule ^(.*)/?$ new/$1 [L,R=301]
    
    ##For internal redirect rule.
    RewriteRule ^new/(.*)/?$ $1 [L,NC]
    
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}\.html -f
    RewriteRule ^(.*)/?$ $1.html [NC,L]
    
    #remove php file extension
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}\.php -f
    RewriteRule ^(.*)/?$ $1.php [QSA,NC,L] 
    
    #set max post size
    php_value memory_limit 2048M
    php_value max_execution_time 3000
    php_value max_input_time 6000
    php_value post_max_size 800M
    php_value upload_max_filesize 200M
    
    #Caching schema
    <FilesMatch "\.(png|svg|css|eot|ttf|woff|woff2|otf|js|css)$">
    Header set Cache-Control "public, max-age=86400000"
    </FilesMatch>
    
    DirectoryIndex index.html
    
    #Custom 404 errors
    ErrorDocument 404 /404.html
    
    #Prevent viewing of .htaccess file
    <Files .htaccess>
    order allow,deny
    deny from all
    </Files>
    
    <Files error_log>
    order allow,deny
    deny from all
    </Files>
    
    #Prevent directory listings
    Options All -Indexes
    


    根据您显示的尝试/规则,您能否尝试遵循一次。请确保在测试您的 URL 之前清除浏览器缓存。

    RewriteEngine on 
    ##For external redirect rule.
    RewriteCond %{REQUEST_URI} !^/(?:api|list)/? [NC]
    RewriteRule ^(.*)/?$ new/$1 [L,R=301]
    
    ##For internal redirect rule.
    RewriteRule ^new/(.*)/?$ $1 [L,NC]
    

    或尝试以下规则集:请确保一次仅尝试 1 组,无论是在上面还是在后面。

    RewriteEngine on 
    ##For external redirect rule.
    RewriteCond %{THE_REQUEST} !\s/(?:api|list).*\s [NC]
    RewriteRule ^(.*)/?$ new/$1 [L,R=301]
    
    ##For internal redirect rule.
    RewriteRule ^new/(.*)/?$ $1 [L,NC]
    

    【讨论】:

    • 我都试过了,但它说 ERR_TOO_MANY_REDIRECTS
    • @BenMert,好的,除了这些之外,您的 htaccess 文件中还有其他规则吗?
    • 我的 htaccess 文件中的东西:你的代码,删除 html/php 文件扩展,一些 php_value 东西,缓存模式,防止查看 .htaccess 和 error_log 文件,自定义 404 和防止目录列表
    • @BenMert,好的,那么您的系统中是否存在新目录?如果是,那么您的所有页面/文件都存在吗?
    • 什么意思?
    猜你喜欢
    • 1970-01-01
    • 2012-01-11
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-23
    • 2012-09-26
    • 2013-05-15
    相关资源
    最近更新 更多