2

我在一个实时站点上工作,所以我不想通过犯错误来创建任何服务器错误。我需要将所有包含下划线的 URL 更改为破折号,但仅限于一个目录 (www.domain.com/directory/),但我不想更改图像、css 或 js 文件。

到目前为止,我的 .htaccess 得到的只是:

RewriteRule ^([^_]*)_([^_]*_.*) $1-$2 [N]
RewriteRule ^([^_]*)_([^_]*)$ /$1-$2 [L,R=301]

但我不知道如何仅为特定指定此规则并排除我的图像、css 和 javascript 文件。

有任何想法吗?

4

1 回答 1

2

要将规则限制为某些请求,您需要使用RewriteCond. 您可以在此处找到有关这些文档的文档。

为了让它为你工作,www.domain.com/directory/你可以将它添加到 RewriteRule 本身。请注意,您使用的是永久重定向,因此在您从浏览器中为您的站点清除缓存之前,您当前所做的任何更改都将不起作用。

RewriteRule ^directory/([^_]*)_([^_]*_.*) /directory/$1-$2 [N]
RewriteRule ^directory/([^_]*)_([^_]*)$ /directory/$1-$2 [L,R]

要排除 css 和 js 文件,您可以使用类似这样的东西。这将排除以或( )!结尾的 ( ) 文件。.css.js\.(css|js)

RewriteCond %{REQUEST_URI} !\.(css|js)$
RewriteRule ^directory/([^_]*)_([^_]*_.*) /directory/$1-$2 [N]
RewriteRule ^directory/([^_]*)_([^_]*)$ /directory/$1-$2 [L,R]

我无法测试这些规则,我鼓励您设置一个简单的本地主机服务器来测试,然后再在您的实时站点上进行测试。如果您在站点上测试重定向,请始终使用临时重定向 ( [R]) 而不是永久重定向 ( [R=301])。永久重定向由浏览器缓存并减少服务器上后续请求的负载,但如果您正在测试,它会记住以前的尝试。仅在所有规则按您希望的方式工作后,才将临时重定向更改为永久重定向。

于 2013-10-19T13:41:11.937 回答