我的.htaccess中有这套规则,我想添加额外的规则(或更改现有规则),以便将URL中的所有下划线重写为连字符。
RewriteEngine on
#1--Redirect "/?load=/foo" to "/foo"--#
RewriteCond %{THE_REQUEST} /\?load=/([^\s&]+) [NC]
RewriteRule ^ /%1? [NE,L,R]
#2--Rewrite "/foo" to "/?load=/foo--#
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)/?$ /?load=/$1 [NC,L,QSA]
另外,有没有办法限制连续连字符的数量?在某些网址上重写_
到-
可以获得file---data---backup
之类的结果,因为原始网址在两个下划线之间有一个连字符。我可以以某种方式将这些URL变成例如而是file-data-backup
?
答案 0 :(得分:0)
您可以使用其他重定向规则:
nextButton.setDisable(true);
task = createWorker();
progressInd.progressProperty().bind(task.progressProperty());
th = new Thread(task);
th.start();
答案 1 :(得分:0)
所述方法,例如, this answer中的on the Apache httpd wiki here应该适合你。主要是,您需要添加一些RewriteConds,以防止它应用于与图像和其他实际文件相对应的任何URL:
# Replace all but the last underscore with dashes internally:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^_]*)_([^_]*_.*)$ $1-$2 [N]
# Replace the last underscore and issue a HTTP permanent redirect:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^_]*)_([^_]*)$ /$1-$2 [L,R=301]
(在现有规则之前添加这些规则,但在RewriteEngine On
行之后。请注意,如果您不知道,可以省略RewriteConds,并且不会在其名称中包含任何带有下划线的实际文件。)
您还可以修改这些规则以折叠连续的连字符:
# Collapse all but one group of multiple hyphens internally:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^-]*(-[^-]+)*)--+([^-]+(-[^-]+)*--.*)$ $1-$3 [N]
# Collapse the last group of hyphens and issue a HTTP permanent redirect:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^-]*(-[^-]+)*)--+([^-]+(-[^-]+)*|)$ /$1-$3 [L,R=301]
或者甚至同时做两件事:
# Collapse all but one group of multiple hyphens and/or underscores internally:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^-_]*(-[^-_]+)*)(--|-_|_)[-_]*([^-_]+(-[^-_]+)*(--|_).*)$ $1-$4 [N]
# Collapse the last group of hyphens and/or underscores and issue a HTTP permanent redirect:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^-_]*(-[^-_]+)*)(--|-_|_)[-_]*([^-_]+(-[^-_]+)*|)$ /$1-$4 [L,R=301]
(免责声明:我实际上没有测试过这些规则。我相信它们应该有效,但我可能在某个地方犯了错字。)
这些规则都不会以任何方式影响查询字符串,这可能是您想要的。如果你做想要替换查询字符串中的下划线和/或多个连续连字符,你也可以这样做,例如使用描述的方法Change Location Mode to High Accuracy Programmatically Android。