我们目前在.htaccess文件中使用以下规则:
# Convert URLs with underscores into hyphens (excluding any image files)
# Keep scanning the URL as long as there are two hyphens
RewriteRule ^(/?.*[^/]*?)-([^/]*?-[^/]*)$ $1_$2 [N,QSA]
# Replace last hyphen and do a permanent redirect (ending the rewriting operation)
RewriteRule ^(/?.*[^/]*?)-([^/-]*)$ $1_$2 [L,QSA]
但是,我们的网站托管服务商正在通过以下投诉关闭我们的网站:
在跟踪此问题时,我们可以发现在其中重写N的FLAG 第一条规则就是循环。这创造了运行数小时的过程 作为无限循环和咀嚼服务器的资源,如 产生每个使用几百MB内存的进程 过程
你们这些mod_rewrite专家有没有更好的方法来做到这一点?
我们只是尝试使用破折号替换我们文件中的所有下划线。遗憾的是,我们使用的软件无法在文件名中生成带破折号的文件。
非常感谢!
谢谢,道格
答案 0 :(得分:0)
你可以试试这个:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/([^_]*)?_?([^_]*)?_?([^_]*)?_?([^_]*)?_?([^_]*)?_?([^_]*)?/? [NC]
# Replace underscores (_) with hyphens (-)
RewriteRule .* %1-%2-%3-%4-%5-%6 [L,C]
# Remove unused trailing hyphens
RewriteRule ^(.*)\.([\w]+)(?:[\-]*)?$ $1.$2 [R=301,L]
在文件名中用短划线_
替换最多5个下划线-
。例子:
http://example.com/name1.ext
到
http://example.com/name1_name2_name3_name4_name5_name6.ext
不修改文件扩展名。
网址结构必须为http://domain/filename
重定向是永久性的。对于静默映射,请从[R = 301,L]中删除R=301
。