我有一个包含以下内容的网址
/4-new-south-wales/499-some-category.html
我想删除使用mod_rewrite数字和以下连字符。
我有以下规则
RewriteRule (.*)\d+-(.*) $1$2 [R=301,L]
这给了我以下
/4-new-south-wales-nsw/49cross-breeds-designer-dogs.html
这些可以嵌套在任何级别。例如
/a/b/c/4-new-south-wales-nsw/49123123-cross-breeds-designer-dogs.html
我想以
结束/a/b/c/new-south-wales-nsw/cross-breeds-designer-dogs.html
感谢您的帮助。
答案 0 :(得分:1)
(/.*/)\d+-(.*)
这会解决吗?
。*是贪婪的,所以它也匹配第一个数字字符,只留下最后一个数字与\ d +匹配,所以你的第一个捕获组最终是: / 4-新 - 南 - 线圈纵行/ 49
答案 1 :(得分:0)
答案 2 :(得分:0)
要在URL路径中替换多个任意放置的/ddd-XXX
模式,Apache需要一次更换一个匹配项,然后在每次替换后递归重定向URL。但要正确执行此操作,您需要将RewriteBase
语句添加到.htaccess
文件,并将其设置为包含.htaccess
文件的路径。
这是一个经过测试的.htaccess
文件,它可以满足您的需求:
<IfModule mod_rewrite.c>
RewriteEngine on
# Set RewriteBase to the URL-path containing this .htaccess file:
RewriteBase /apache
# Redirect first "/ddd-XXX" path segment to: "/XXX":
RewriteRule ^((?:(?!\d+-)[^/]+/)*)\d+-(.*)$ $1$2 [R=301,L]
# Rewrite the resulting URL path to show.php as a query string
# (if resulting URL-path is NOT a real file or a directory).
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ show.php?path=$1
</IfModule>
在我的测试系统上,这个.htaccess
文件位于/apache
目录(这是我设置RewriteBase
的目录)。请注意,最终重定向的URL路径可能不是真实的文件!在上面的.htaccess
文件中,我有一个额外的规则来处理最终重定向的URL(它不指向真实文件),并将此路径作为查询变量传递给show.php
脚本。 / p>