Apache .htaccess重定向一个干净的图像url

Apache .htaccess重定向一个干净的图像url,apache,.htaccess,mod-rewrite,url-rewriting,clean-urls,Apache,.htaccess,Mod Rewrite,Url Rewriting,Clean Urls,我正在尝试为图像创建干净的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-descr

我正在尝试为图像创建干净的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图像目录中

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_重写


“somedescription”可以是一个单词或多个单词,它们之间用-所以基本上都是在-之后和之前。应该忽略,并且使用不同目录中的新文件名重写新文件名

我认为您更愿意使用/seo images/.htaccess中设置的更简单的规则,只有当%{REQUEST_filename}既不是文件也不是目录时,我们才重写:

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]
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]
如果没有重定向,我们只使用内部重写,谷歌将始终考虑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

我想您应该使用/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]
如果没有重定向,我们只使用内部重写,谷歌将始终考虑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

谢谢,第一个像梦一样工作。这个目录不叫seo图片,只是用这个名字来描述我想做的事情。谢谢,第一个像梦一样工作。这个目录不是seo图片,只是用这个名字来描述我想做的事情。