.htaccess正则表达式用下划线替换破折号

时间:2016-09-08 18:32:34

标签: regex apache mod-rewrite

出于某种原因,一位同事用我们网站的URL中的下划线替换了虚线。

我想在我们的.htaccess中使用正则表达式将旧网址改为新网址

我发现这段代码按预期工作得很好,应该反其道而行之,它用短划线代替下划线:

RewriteEngine     On
RewriteRule       ^(/?articles/.*/[^/]*?)-([^/]*?-[^/]*)$ $1_$2 [N]
RewriteRule       ^(/?articles/.*/[^/]*?)-([^/-]*)$       $1_$2 [R=301]

但出于某种原因,我忽略了为什么如果我反转逻辑

它不起作用
public class ViewTablePanel extends JPanel{
  static JTable tblVoters;
  static DefaultTableModel tblModel;

  ViewTablePanel(){       
    setBorder(BorderFactory.createTitledBorder("Voter's Information Table"));

    data=new Database();
    setColumns();
    data.retrieveRecords();

    ViewTablePanel.tblVoters=new JTable(ViewTablePanel.tblModel);

    JScrollPane scrollPane = new JScrollPane();
    scrollPane.setBounds(x,y,width,height);
    add(scrollPane);
    scrollPane.setViewportView(ViewTablePanel.tblVoters);
  }
}

即使我逃脱破折号,它也行不通,欢迎任何想法或更正

1 个答案:

答案 0 :(得分:0)

您可以在网站root .htaccess中使用这些规则DPI flag

RewriteEngine On

RewriteRule ^(articles/[^-]*)-+([^-]*-.*)$ $1_$2 [N,NC,DPI]

RewriteRule ^(articles/[^-]*)-([^-]*)$ /$1_$2 [NE,L,NC,R=301]

DPI标志会导致重写的URI的PATH_INFO部分被丢弃。