0

在 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=testblog.php?title=new它没有重写 URL 时,所以我尝试去blog/testblog/new它给了我一个 404 错误。我以为有什么东西坏了。所以我回去了blog.php?title=testing,一切都恢复了。所以它只适用于我输入的第一个 URL。

我也在根目录下的文件夹中设置了这个域。所以 root 是example.com,但是这个站点是example.com/something然后 GoDaddy 把它变成something.com.

我想要干净的 URL,我仍然希望 php 能够$_GET在查询字符串上使用,但是我想要好的 seo URL,比如example.com/blog/title

4

1 回答 1

1

第一条规则应该将你的 php 文件重定向到漂亮的 URL 第二条规则应该在内部将漂亮的 URL 重定向到内部的旧 URL,这样它对用户不可见:

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]
于 2013-08-12T21:53:39.500 回答