以下是我的htaccess文件内容:
上述代码运行良好,但存在以下两种情况:
Options -Multiviews -Indexes
RewriteEngine on
RewriteBase /
## don't touch /Forum URIs
RewriteRule ^Forum/ - [L,NC]
## hide .php extension snippet
# To externally redirect /dir/foo.php?id=123 to /dir/foo
RewriteCond %{THE_REQUEST} ^GET\s([^.]+)\.php\?seo=([^&\s]+) [NC]
RewriteRule ^ %1/%2? [R,L]
# To internally forward /dir/foo/12 to /dir/foo.php?id=12
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/([^/]+)/?$ $1.php?seo=$2 [L,QSA]
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^GET\s([^.]+)\.php\s [NC]
RewriteRule ^ %1 [R,L]
# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(.*?)/?$ $1.php [L]
上述代码运行良好,但存在以下两种情况:
'Forum'目录下的页面未去除'.php'扩展名。这些页面中没有GET请求。如果我删除上面的Forum条件,会显示404错误Forum/.php未找到。
另外,对于GET请求变量不为'seo'的页面,.php扩展名也未被删除。
带有' seo '作为GET变量的URL正在转换为SEO友好形式,但带有其他变量(如'id'或'rg=&vp=&da=')的GET请求未能正常工作。我已添加了额外的规则(与seo相同),但仍然没有影响。
/abc
加载了/page.php?seo=abc
,因此你不能让/xyz
加载/page.php?popular=abc
。更好的做法是将每个查询字符串转换为斜杠,例如:example.com/test/page/seo/abc-def/
和example.com/test/page/popular/xyz/
等美观的 URL 方案。 - anubhavaforum
.php
的问题,如果您需要,我可以发布一个答案。 - anubhava