skip to Main Content

I need to rewrite URL’s using .htaccess to redirect all users from old sitemap to the new URL’s. The old URLs looks like this:

http://server.linux.example.com/a/v/c/document_title1.php
http://server.linux.example.com/jp/x/1/o/document_title32.php
http://server.linux.example.com/kr/a/a/2/document_title12343.php
http://server.linux.example.com/cn/6/z/z/document_title124.php

I need to keep first directory and then remove all sub-directories, including slashes and characters (letters and numbers between /) so the new URLs will look like this:

http://server.linux.example.com/document_title1.php
http://server.linux.example.com/jp/document_title32.php
http://server.linux.example.com/kr/document_title12343.php
http://server.linux.example.com/cn/document_title124.php

This is what I made so far using help from stackoverflow.com.

(?<=http://server.linux.example.com/)(jp/|kr/|cn/)?.*(?=.php)

regex101.com shows that this is a valid regex but I’m having problems with implementing this within the .htaccess as I’m reciving 500 erros.

ReWriteRule (?<=http://server.linux.example.com/)(jp/|kr/|cn/)?.*(?=.php)

What I’m doing wrong?

2

Answers


  1. I’d chose an approach like this:

    RewriteEngine on 
    RewriteRule ^/?([^/]+)/.+/([^/]+.php)$ /$1/$2 [END]
    

    You may need to add some exceptions depending on your specific situation, but in general it should do what you want.

    That rule should work likewise in dynamic configuration files (“.htaccess”) and in the real http servers host configurations.

    And a general remark: you should always prefer to place such rules in the http servers host configuration instead of using dynamic configuration files (“.htaccess”). Those dynamic configuration files add complexity, are often a cause of unexpected behavior, hard to debug and they really slow down the http server. They are only provided as a last option for situations where you do not have access to the real http servers host configuration (read: really cheap service providers) or for applications insisting on writing their own rules (which is an obvious security nightmare).

    Login or Signup to reply.
  2. Try with:

    RewriteEngine on 
    RewriteRule ^/?(jp/|kr/|cn/)?.+/([^/]+.php)$ /$1$2 [L]
    

    You can redirect (and not only rewrite) with [R=302] instead of [L].

    And to find a problem, look at your error logs.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search