我已经在HTAccess上工作了几天,而且我已经走到了尽头。
我已经重写并将文件重定向为无扩展名,现在我需要重写网址为SEO友好。
以前,网址为:http://www.example.com/member.php?playername=encodedName
我删除了扩展程序:http://www.example.com/member?playername=encodedName
我无法理解:http://www.example.com/member/encodedName
这是我到目前为止所得到的:
代码尝试重定向到SEO友好网址。不起作用。
RewriteRule ^member/([^/]*)$ /member.php?playername=$1 [L]
RewriteRule ^squad/([^/]*)$ /squad.php?squadname=$1 [L]
RewriteRule ^article/([^/]*)$ /article.php?articlename=$1 [L]
除非目录,否则删除尾部斜杠。作品。
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [R=301,L]
解析无扩展php网址的.php文件。作品。
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]
将外部.php请求重定向到无扩展名网址。作品。
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /([^/]+/)*[^.#?\ ]+\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(([^/]+/)*[^.]+)\.php $1 [R=301,L]
有没有人知道我做错了什么?这可能是我刚刚遇到的一个非常新手的问题。
答案 0 :(得分:1)
“代码尝试重定向到SEO友情网址”部分看起来不错。当您将直接重定向到php文件的请求重定向到删除扩展时,您没有做任何关于您重写的3个SEO友好URL的具体内容。
如果您转到http://www.example.com/member/encodedName
,并且您未在http://www.example.com/member.php?playername=encodedName
处获得内容,那么这看起来像是Multiviews问题。您需要在服务器/ vhost配置中关闭Multiviews,或将其添加到htaccess文件的顶部(或在相应的现有Options
语句中):
Options -Multiviews
为了将重定向到 SEO友好网址,请在之前添加此“将外部.php请求重定向到无扩展网址。 “规则:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /member\.php\?playername=([^&\ ]+)([^\ ]*)
RewriteRule ^ /member/%1?%2 [L,R=301]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /squad\.php\?squadname=([^&\ ]+)([^\ ]*)
RewriteRule ^ /squad/%1?%2 [L,R=301]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /artcile\.php\?articlename=([^&\ ]+)([^\ ]*)
RewriteRule ^ /article/%1?%2 [L,R=301]