1

我正在尝试为图像做干净的 URL,其中 url 还包含图像的描述(用于 seo 目的)。文件名的唯一重要部分是开头和扩展名。

我正在尝试获取类似图像的 URL,例如:

mywebsite.com/seo-images/ 123 -some-description.jpg

在图像实际位于的位置进行干净的 url 重写

mywebsite.com/uploads/ 123 .jpg

文件类型可以是 .jpg 或 .png 或 .gif 等。

我也有缩略图:

mywebsite.com/seo-images/t123 -some -description.jpg

还要做一个干净的 url 重写以相同的方式和位置

mywebsite.com/uploads/t123 .jpg _

我尝试将以下 .htaccess 文件放在 seo-images 目录中

RewriteEngine On
RewriteBase /seo-images/

# match all numbers upto - then get the extension after .
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^([_0-9a-zA-Z-]+/)?-([_0-9a-zA-Z-]+/)?([_0-9a-zA-Z-]+/)\.$ /uploads/$1.$3 [R=301,L]

到目前为止,不好。

我在根目录中有一个 .htaccess 文件,它执行其他干净的 mod_rewrites。

“一些描述”可以是一个单词或多个单词,由 - 分隔,所以基本上 - 之后和 . 之前的所有内容。应该忽略并且新文件名用于使用不同目录中的新文件名重写

4

1 回答 1

1

我认为您会使用 /seo-images/.htaccess 中设置的更简单的规则,仅当 %{REQUEST_FILENAME} 既不是文件也不是目录时才重写,而不是相反:

RewriteEngine On
#RewriteBase /seo-images/

# match all numbers upto - then get the extension after .
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^-]+)-.*\.([[:alnum:]]+)$ /uploads/$1.$2 [L]

如果没有重定向,我们只使用内部重写,Google 将始终考虑 mywebsite.com/seo-images/123-some-description.jpg 而不是 mywebsite.com/uploads/123.jpg 。

或者你更喜欢完全重写:

RewriteEngine On
#RewriteBase /seo-images/

# match all numbers upto - then get the extension after .
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^-]+)-.*\.([[:alnum:]]+)$ /uploads/$1.$2 [R=301,L]

它这样做:

/seo-images/123-some-description.jpg => /uploads/123.jpg
/seo-images/t123-foo-bar.png => /uploads/t123.png
于 2013-11-05T19:19:53.217 回答