我需要重定向所有URL,如下所示:
example.com/podcasts//rebt
至
example.com/podcasts
我尝试调整这段代码来完成这两个任务,但是我无法让它工作:
RewriteCond %{REQUEST_METHOD} !=POST RewriteCond %{REQUEST_URI} ^(.*?)(/{2,})(.*)$ RewriteRule . %1/%3 [R=301,L]
ifmq2ha21#
要删除URL路径末尾的//<something>(例如/podcasts//rebt到/podcasts),请尝试在根.htaccess文件的顶部执行以下操作:
//<something>
/podcasts//rebt
/podcasts
.htaccess
RewriteEngine On RewriteCond %{THE_REQUEST} \s([^?]+?)// RewriteRule . %1 [R=301,L]
THE_REQUEST服务器变量包含初始请求标头的第一行(例如GET /podcasts/rebt HTTP/1.1),并且在内部重写请求时不会更改(与REQUEST_URI不同)。正则表达式\s([^?]+?)//捕获URL路径中第一个双斜杠之前的部分。双斜杠之后的任何内容(包括双斜杠)都将被丢弃。该正则表达式还确保我们不会无意中匹配查询字符串(如果有)。%1反向引用包含从前面的 CondPattern 中捕获的子模式(即URL路径中第一个双斜杠之前的所有内容)。
THE_REQUEST
GET /podcasts/rebt HTTP/1.1
REQUEST_URI
\s([^?]+?)//
%1
/directory//something
/directory
/directory/
您应该先使用302(临时)重定向进行测试,以避免任何潜在的缓存问题,并且只有在您确定它按预期工作时才更改为301(永久)重定向。您应该在测试前清除浏览器缓存。
查看现有规则...
此代码旨在将URL路径中的多个斜杠减少为单斜杠,而不是完全 * 删除 * 双斜杠和剩余路径。例如,将/podcasts//rebt减少为/podcasts/rebt。但是,由于它检查REQUEST_URI服务器变量(该变量在整个请求过程中可能会更改),因此可能无法按预期工作。此外,检查REQUEST_METHOD的条件似乎是多余的,除非您在内部错误地POST到双斜线URL?301重定向会删除任何POST数据(因为浏览器将其转换为GET)-因此在某些情况下可能需要检查。
/podcasts/rebt
REQUEST_METHOD
1条答案
按热度按时间ifmq2ha21#
要删除URL路径末尾的
//<something>
(例如/podcasts//rebt
到/podcasts
),请尝试在根.htaccess
文件的顶部执行以下操作:THE_REQUEST
服务器变量包含初始请求标头的第一行(例如GET /podcasts/rebt HTTP/1.1
),并且在内部重写请求时不会更改(与REQUEST_URI
不同)。正则表达式
\s([^?]+?)//
捕获URL路径中第一个双斜杠之前的部分。双斜杠之后的任何内容(包括双斜杠)都将被丢弃。该正则表达式还确保我们不会无意中匹配查询字符串(如果有)。%1
反向引用包含从前面的 CondPattern 中捕获的子模式(即URL路径中第一个双斜杠之前的所有内容)。/directory//something
到/directory
到/directory/
(通过mod_dir)。在这种情况下,您应该避免删除第一个尾随斜杠。您应该先使用302(临时)重定向进行测试,以避免任何潜在的缓存问题,并且只有在您确定它按预期工作时才更改为301(永久)重定向。您应该在测试前清除浏览器缓存。
查看现有规则...
此代码旨在将URL路径中的多个斜杠减少为单斜杠,而不是完全 * 删除 * 双斜杠和剩余路径。例如,将
/podcasts//rebt
减少为/podcasts/rebt
。但是,由于它检查REQUEST_URI
服务器变量(该变量在整个请求过程中可能会更改),因此可能无法按预期工作。此外,检查
REQUEST_METHOD
的条件似乎是多余的,除非您在内部错误地POST到双斜线URL?301重定向会删除任何POST数据(因为浏览器将其转换为GET)-因此在某些情况下可能需要检查。