在GoDaddy Linux主机上,真的很想让这个mod重写工作,但是有一个奇怪的问题。非常简单的代码如下所示:
Options +FollowSymLinks -MultiViews
rewriteengine on
RewriteBase /
## clean URLs
RewriteRule ^blog/([^/.]+)/?$ blog.php?title=$1 [L]
然后作为测试我去了blog.php?title=testing
它按照预期的那样做,并将URL重写为blog/testing
。但是当我转到blog.php?title=test
或blog.php?title=new
时,它没有重写网址,所以我尝试转到blog/test
和blog/new
,这给了我404错误。我觉得有些事情破了。所以我回到了blog.php?title=testing
,一切都恢复了。所以它只适用于我输入的第一个URL。
此外,我在root下的文件夹中设置了此域。因此root为example.com
,但此网站为example.com/something
,然后GoDaddy将其转换为something.com
。
我想要干净的网址,我仍然希望php能够在查询字符串上使用$_GET
,但我想要像example.com/blog/title
答案 0 :(得分:1)
第一条规则应该将您的php文件重定向到漂亮的网址第二条规则应该在内部将漂亮网址重定向到旧网址,以便用户看不到:
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
# Redirect /blog.php?title=anything to /blog/anything
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+blog\.php\?title=([^\s&]+)&? [NC]
RewriteRule ^ /blog/%1? [R=302,L]
# Internally forward /blog/anything to /blog.php?title=anything
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^blog/([\w-]+)/?$ /blog.php?title=$1 [L]