我整天都在工作,尝试了数十种变体,但似乎无法完全重写。
RewriteCond %{THE_REQUEST} /pwreset\.php\ [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{THE_REQUEST} \s(.+?)/+[?\s]
RewriteRule ^(.+?)/$ https\:\/\/www\.example\.com\/support\/pwreset\.php [L]
它返回的URL是:
https://www.web-jive.com/support/pwreset.php/?key=cdc3b1aa842785f7345be501a30ddc83
我需要删除的是问号前的pwrest.php斜杠。我在哪里出错了?
这个想法是在下面有第一个URL,然后重定向到第二个:
https://example1.com/pwreset.php?key=cdc3b1aa842785f7345be501a30ddc83
https://example2.com/support/pwreset.php?key=cdc3b1aa842785f7345be501a30ddc83
编辑
根据怀特先生的建议,我要发布整个.htaccess文件。
RewriteEngine On
# Announcements
RewriteRule ^announcements/([0-9]+)/[a-z0-9_-]+\.html$ ./announcements.php?id=$1 [L,NC]
RewriteRule ^announcements$ ./announcements.php [L,NC]
# Downloads
RewriteRule ^downloads/([0-9]+)/([^/]*)$ ./downloads.php?action=displaycat&catid=$1 [L,NC]
RewriteRule ^downloads$ ./downloads.php [L,NC]
# Knowledgebase
RewriteRule ^knowledgebase/([0-9]+)/[a-z0-9_-]+\.html$ ./knowledgebase.php?action=displayarticle&id=$1 [L,NC]
RewriteRule ^knowledgebase/([0-9]+)/([^/]*)$ ./knowledgebase.php?action=displaycat&catid=$1 [L,NC]
RewriteRule ^knowledgebase$ ./knowledgebase.php [L,NC]
#Password reset
RewriteCond %{QUERY_STRING} ^key=[0-9a-f]{32}$
RewriteRule ^pwreset\.php$ https://www.web-jive.com/support%{REQUEST_URI} [R=302,L]
#Redirect to new support URL
RewriteCond %{HTTP_HOST} ^members\.web\-jive\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.members\.web\-jive\.com$
RewriteRule ^/?$ "https\:\/\/www\.web\-jive\.com\/support" [R=301,L]
RewriteCond %{HTTP_HOST} ^members\.web\-jive\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.members\.web\-jive\.com$
答案 0 :(得分:0)
您看到的输出(URL路径上带有斜杠)不是您发布的指令的结果,所以您可能与其他指令有冲突,或者看到了缓存的响应。
但是,您发布的规则似乎要复杂得多。
1. https://example1.com/pwreset.php?key=cdc3b1aa842785f7345be501a30ddc83 2. https://example2.com/support/pwreset.php?key=cdc3b1aa842785f7345be501a30ddc83
假设:
key
值;只是URL路径(即/pwreset.php
)example1.com
和example2.com
指向不同的位置(文件系统不重叠)。要从1.
重定向到2.
,请在.htaccess
的根目录下的example1.com
文件顶部尝试以下操作:
RewriteEngine On
RewriteRule ^pwreset\.php$ https://example2.com/support%{REQUEST_URI} [R=302,L]
任何查询字符串(例如key=abc...
)均保持不变。
请注意,这是302(临时)重定向。确认它可以正常工作后,才将其更改为301(永久)。
如果您需要检查是否存在key=
URL参数并将其设置为32个十六进制字符串(这似乎是您的示例所表示的内容),请在上述RewriteRule
之前添加一个条件,检查QUERY_STRING
服务器变量。例如:
RewriteCond %{QUERY_STRING} ^key=[0-9a-f]{32}$
RewriteRule ^pwreset\.php$ https://example2.com/support%{REQUEST_URI} [R=302,L]
如果请求中存在其他任何URL参数,则重定向将失败。
旁边:
RewriteRule ^(.+?)/$ https\:\/\/www\.example\.com\/support\/pwreset\.php [L]
这看起来非常像cPanel。无需在RewriteRule
susbtitution 参数中反斜杠冒号,斜杠和点。这是一个“普通”字符串,而不是正则表达式。这些字符在这里没有特殊含义。