【发布时间】:2010-10-26 16:31:14
【问题描述】:
我有以下问题。我们在同一个页面上使用了许多不同的 URL。现在我们只想为这些页面使用一个 URL。举个例子:
RewriteRule ^(subfolder1/folder1/|(subfolder2|subfolder3)/folder2/|folder3/)?(name1|name2|name3|name4)$ scriptname.php [QSA,NC]
如您所见,它非常混乱。我现在要做的是:使用 301 将所有 URL 仅重写为其中一个 URL(例如 subfolder1/folder1/name1),而不是在该 URL 上使用重写来处理实际脚本。它可能看起来像这样:
RewriteRule ^((subfolder2|subfolder3)/folder2/|folder3/)?(name2|name3|name4)$ /subfolder1/folder1/name1 [R=301,QSA,NC]
RewriteRule ^subfolder1/folder1/name1$ script.php [QSA.NC]
直到这里我没有问题。但现在是棘手的部分。我们在 UNIX 和 Windows 机器上使用了几台开发机器。它们都有不同的主机名和文件夹。以下是一些示例:
http://www.example.com (production)
http://test.example.com (testing)
http://localhost/development_folder/ (development WIN)
http://localhost:8888/development_folder/ (development MAC)
问题是,由于我们在开发机器上有子文件夹,我不能像 /subfolder1/folder1/name1/ 那样使用绝对 URL,例如指向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]
或者有更好的方法吗?任何提示都会有很大帮助。
【问题讨论】:
标签: .htaccess mod-rewrite redirect url-rewriting