Create 301 rewrite from a folder using relative rewrite URLs

I have the following problem. We used many different URLs on the same page. Now we want to use only one URL for these pages. Here is an example:

RewriteRule ^(subfolder1/folder1/|(subfolder2|subfolder3)/folder2/|folder3/)?(name1|name2|name3|name4)$ scriptname.php [QSA,NC]

As you can see, this is pretty dirty. Now, I want to do the following: rewrite all the URLs to only one of these URLs (e.g. subfolder1 / folder1 / name1) using 301, and then use the rewrite of that URL to address the actual script. It might look like this:

RewriteRule ^((subfolder2|subfolder3)/folder2/|folder3/)?(name2|name3|name4)$ /subfolder1/folder1/name1 [R=301,QSA,NC]
RewriteRule ^subfolder1/folder1/name1$ script.php [QSA.NC]

So far I have no problem. But now comes the hard part. We use several development machines on UNIX and Windows computers. They all have different host names and folders. Here are some examples:

http://www.example.com (production)
http://test.example.com (testing)
http://localhost/development_folder/ (development WIN)
http://localhost:8888/development_folder/ (development MAC)

, , , URL /subfolder1/folder1/name1/, , . http://localhost/subfolder1/folder1/name1/, http://localhost/development_folder/subfolder1/folder1/name1/, .

, ? development_folder , / :

RewriteRule ^((subfolder2|subfolder3)/folder2/|folder3/)?(name2|name3|name4)$ /development_folder/subfolder1/folder1/name1 [R=301,QSA,NC]
RewriteRule ^development_folder/(.*)$ $1 [QSA.NC]
RewriteRule ^subfolder1/folder1/name1$ script.php [QSA.NC]

? .

+3
3

Apache Include . , , .

, include, , , dev dev.

RewriteRule ^((subfolder2|subfolder3)/folder2/|folder3/)?(name2|name3|name4)$ /subfolder1/folder1/name1 [R=301,QSA,NC]
Include /etc/apache/conf.d/*_dev.rewrites
RewriteRule ^subfolder1/folder1/name1$ script.php [QSA.NC]

dev dev /etc/apache/conf.d/my_dev.rewrites:

RewriteRule ^development_folder/(.*)$ $1 [QSA.NC]
+1

RewriteRules ( .htaccess) ? ( /), , , (/).

, , . , RewriteBase (, ...).

0

I think there is a deeper problem with the dev / production servers layout, but I suppose you have your own reasons. This may help you:

# dev
RewriteCond %{HTTP_HOST} ^localhost$ [NC]
RewriteRule ^((subfolder2|subfolder3)/folder2/|folder3/)?(name2|name3|name4)$ /subfolder1/folder1/name1 [R=301,QSA,NC]
RewriteRule ^subfolder1/folder1/name1$ script.php [QSA.NC]

# production
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^((subfolder2|subfolder3)/folder2/|folder3/)?(name2|name3|name4)$ /dev_folder/subfolder1/folder1/name1 [R=301,QSA,NC]
RewriteRule ^dev_folder/subfolder1/folder1/name1$ script.php?dev=1 [QSA.NC]

The idea is to use the host name to have a different set of rules. You can use dev1.example.com, dev2.example.cometc. If necessary, adding that the "fake" domains to /etc/hostsas an alias of 127.0.0.1

0
source

Source: https://habr.com/ru/post/1771538/


All Articles