【问题标题】:URLs rewrite using regex pattern使用正则表达式模式重写 URL
【发布时间】:2023-04-09 14:04:01
【问题描述】:

我需要使用 .htaccess 重写 URL,以将所有用户从旧站点地图重定向到新 URL。旧网址如下所示:

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

我需要保留第一个目录,然后删除所有子目录,包括斜杠和字符(/ 之间的字母和数字),这样新的 URL 将如下所示:

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

这是我到目前为止使用 stackoverflow.com 的帮助所做的。

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

regex101.com 显示这是一个有效的正则表达式,但我在 .htaccess 中实现它时遇到了问题,因为我收到了 500 个错误。

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

我做错了什么?

【问题讨论】:

    标签: regex apache .htaccess mod-rewrite url-rewriting


    【解决方案1】:

    我选择了这样的方法:

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

    您可能需要根据您的具体情况添加一些例外情况,但通常它应该做您想做的事情。

    该规则应该同样适用于动态配置文件(“.htaccess”)和真实的 http 服务器主机配置。

    一般来说:您应该始终喜欢将此类规则放在 http 服务器主机配置中,而不是使用动态配置文件(“.htaccess”)。这些动态配置文件增加了复杂性,通常是导致意外行为的原因,难以调试,而且它们确实减慢了 http 服务器的速度。它们仅在您无法访问真正的 http 服务器主机配置(阅读:非常便宜的服务提供商)或坚持编写自己的规则的应用程序(这是一个明显的安全噩梦)的情况下作为最后一个选项提供。

    【讨论】:

    • 我刚刚测试了你的解决方案,不幸的是它给了我 500 错误:(
    • 嗯,那么您需要检查您的 http 服务器错误日志文件以找出实际问题。
    • 一个狂野的镜头,但可能是这里的问题:也许你操作的是一个非常旧的、过时的 apache http 服务器版本,它还不知道[END] 标志。尝试用[L] 标志替换它。
    • 我重新检查了一遍,只是为了确定,因为在发布之前我并没有真正测试过规则。但是检查没问题,规则有效并且按预期工作。
    • 和^ ?: RewriteRule ^/?([^/]+)/.+/([^/]+\.php)$ /$1/$2 [L]
    【解决方案2】:

    尝试:

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

    您可以使用[R=302] 而不是[L] 重定向(而不仅仅是重写)。

    要查找问题,请查看错误日志。

    【讨论】:

    • RewriteEngine on RewriteRule ^/?(jp/|kr/|cn/)?.+/([^/]+\.php)$ /$1$2 [R=302] 在 Apache/2.4.25 (Debian) 上成功了。谢谢
    猜你喜欢
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    • 2011-04-01
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多