htaccess重定向SEO友好的URL

时间:2015-01-03 00:45:24

标签: .htaccess mod-rewrite

我有我的htaccess文件设置,以便页面删除扩展名。现在,我正在尝试将转换变量的页面转换为SEO友好的URL ...例如......

http://www.example.com/art-gallery?page=2 ...实际上是“art-gallery.php?page = 2”,会变成...... http://www.example.com/art-gallery/page/2

或...... http://www.example.com/art-piece?id=3 ......会去...... http://www.example.com/art-piece/id/3

......等等......

我的htaccess文件中有很多,我不知道如何做到这一点(有很多关于从www.example.com/index.php?page=2到www.example.com/page的教程/ 2 /但没有一个完全符合我的需要)。理想情况下,我希望能够为所有类似页面执行此操作...

# enable the rewrite engine
RewriteEngine On
# Set your root directory
  RewriteBase /

# Force www:
  RewriteCond %{HTTP_HOST} ^example.com [NC]
  RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301,NC]

# Remove the .php extension
  RewriteCond %{THE_REQUEST} ^GET\ (.*)\.php\ HTTP
  RewriteRule (.*)\.php$ $1 [R=301]

# Remove index and reference the directory
  RewriteRule (.*)/index$ $1/ [R=301]

# Remove trailing slash if not a directory
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} /$
  RewriteRule (.*)/ $1 [R=301]

# Forward request to html file, **but don't redirect (bot friendly)**
  RewriteCond %{REQUEST_FILENAME}.php -f
  RewriteCond %{REQUEST_URI} !/$
  RewriteRule (.*) $1\.php [L]

# Disable Directory Browsing
  Options -Indexes

# Disable Hotlinking of Images 
# with forbidden or custom image option
  RewriteCond %{HTTP_REFERER} !^$
  RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?example.com [NC]
  RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?google.com [NC]
  RewriteRule \.(jpg|jpeg|png|gif)$ – [NC,F,L] 

# Protect htaccess File
  <files ~ "^.*\.([Hh][Tt][Aa])">
  order allow,deny
  deny from all
  satisfy all
  </files>

4 个答案:

答案 0 :(得分:0)

您可以使用变量QUERY_STRING传输参数。 请考虑以下规则:

RewriteRule ^index.html index.php?%{QUERY_STRING}&m=main&a=index

此规则将转换

index.html?something=value

进入

index.php?something=value&m=main&a=index

答案 1 :(得分:0)

您应该使用RewriteEngine

您也可以单独使用301重定向,也可以与RewriteEngine一起使用重定向来重定向SE。

通常,虽然将SE重定向到与用户不同的页面并不是一个好习惯,但可能导致您的pagerank减少。相反,请尝试将所有网页迁移到第二种网址格式,并考虑使用301重定向来帮助过渡。

通常:使用301重定向进行SE友好的页面更改。有关其他参考,请参阅此SO

答案 2 :(得分:0)

您可以在转发请求到html文件规则之前插入此规则

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/])/([^/])/([^/])/?$ $1.php?$2=$3 [L,QSA]

答案 3 :(得分:0)

这已经很老了,但为什么不这样做:

RewriteEngine On
RewriteRule ^([^?]*) index.php?route=$1 [L,QSA]

然后在你的index.php中你可以像这样处理它;

if (isset($_GET['route'])) {
   $route = explode('/', $_GET['route']);
   if (iconv_strlen((end($parts)), 'UTF-8') == 0) {
       array_pop($parts);
   }
}

从这里你的主要等级将用$ route [0],二级$ route [1]

处理

例如;

 http://example.com/art-gallery/2

$ route [0]等于'art-gallery' $ route [1]等于'2'