将下划线重写为破折号
Rewrite undescores to dashes
我知道有很多关于将下划线重写为破折号的现有问题和答案,但我似乎无法让它在这种特殊情况下工作。
我正在将现有的网上商店转换为 Opencart。出于某种奇怪的原因,旧商店在类别名称中使用破折号,但在产品中使用下划线。所以现有url如下:
www.example.com/category-name/product_name
我想将这些重写为:
www.example.com/category-name/product-name
我目前拥有的.htaccess规则如下:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^_]*)_([^_]*_.*) - [N]
RewriteRule ^([^_]*)_([^_]*)$ /- [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_= [L,QSA]
第一节重写下划线,第二节重定向到index.php。虽然这可以很好地重写:
www.example.com/category-name/product_name
至:
www.example.com/category-name/product-name
当我输入 url 例如:
时,Apache 完全崩溃了
www.example.com/category-name/product_name_with_more_underscores
如有任何帮助或指导,我们将不胜感激。
谢谢。
这样说:
# executes when there is exactly 1 space in URI
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^_]*)_([^_]*)$ /- [L,R=302,NE]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^_]*)_+(.+)$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !\.(ico|gif|jpg|jpeg|png|js|css)$ [NC]
RewriteRule ^(.*)$ index.php?_route_= [L,QSA]
我知道有很多关于将下划线重写为破折号的现有问题和答案,但我似乎无法让它在这种特殊情况下工作。
我正在将现有的网上商店转换为 Opencart。出于某种奇怪的原因,旧商店在类别名称中使用破折号,但在产品中使用下划线。所以现有url如下:
www.example.com/category-name/product_name
我想将这些重写为:
www.example.com/category-name/product-name
我目前拥有的.htaccess规则如下:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^_]*)_([^_]*_.*) - [N]
RewriteRule ^([^_]*)_([^_]*)$ /- [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css)
RewriteRule ^([^?]*) index.php?_route_= [L,QSA]
第一节重写下划线,第二节重定向到index.php。虽然这可以很好地重写:
www.example.com/category-name/product_name
至:
www.example.com/category-name/product-name
当我输入 url 例如:
时,Apache 完全崩溃了www.example.com/category-name/product_name_with_more_underscores
如有任何帮助或指导,我们将不胜感激。
谢谢。
这样说:
# executes when there is exactly 1 space in URI
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^_]*)_([^_]*)$ /- [L,R=302,NE]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^_]*)_+(.+)$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !\.(ico|gif|jpg|jpeg|png|js|css)$ [NC]
RewriteRule ^(.*)$ index.php?_route_= [L,QSA]