首页 > 解决方案 > 如何使用apache mod_rewrite从请求的URL中的文件名中删除md5而不使用md5?

问题描述

例子:

这 => URL 请求 ./any_folder/main.d25a1b054a0b0fbeb3def5a0ff50d01e.min.js

为此 => URL 请求 ./any_folder/main.min.js

我的 htaccess:

RewriteEngine On

# Remove md5 from asset files
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+).([a-fA-F0-9]{32}).(.+)?(js|css)$ $1.$3 [L]

# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]

# Send Requests To Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

上面的配置不起作用。

标签: apache.htaccessmod-rewriteurl-rewritingfriendly-url

解决方案


让您的 htaccess 规则文件遵循以下方式。请确保在测试您的 URL 之前清除您的浏览器缓存。

RewriteEngine On

# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    
# Remove md5 from asset files
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
##RewriteRule ^([^.]*)\.(?:[[:alnum:]]{32})\.([^.]*)\.(js|css)/?$ $1.$2.$3 [L]
##Since following has worked for OP, so adding it here, commenting above.
RewriteRule ^(.+).([a-fA-F0-9]{32}).(.+)?(js|css)$ $1.$4 [L]

# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ $1 [L,R=301]

# Send Requests To Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

推荐阅读