我有我的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>
答案 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'