.htaccess 重写仅适用于首次使用

.htaccess 重写仅适用于首次使用,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,在GoDaddy Linux主机上,我真的很想让这个mod重写工作,但是有一个奇怪的问题。非常简单的代码如下所示: Options +FollowSymLinks -MultiViews rewriteengine on RewriteBase / ## clean URLs RewriteRule ^blog/([^/.]+)/?$ blog.php?title=$1 [L] 然后,作为一个测试,我去了blog.php?title=testing,它按照它应该做的做了,并将URL重写到bl

在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
时,它没有重写URL,因此我尝试转到
blog/test
blog/new
,但它给了我一个404错误。我以为有东西坏了。所以我回到了
blog.php?title=testing
,一切又恢复了正常。所以它只适用于我输入的第一个URL

我也在根目录下的文件夹中设置了这个域。所以root是
example.com
,但这个站点是
example.com/something
,然后GoDaddy将其转换为
something.com


我想要干净的URL,我仍然希望php能够在querystring上使用
$\u GET
,但是,我想要一个漂亮的seo URL,比如
example.com/blog/title

第一条规则应该将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]

是否希望url example.com/blog/test/显示blog.php中的内容?title=test,就像重写规则所暗示的那样,还可以将blog.php?title=test重写为example.com/blog/test/?@miah是的,这就是计划。您可以编辑您的问题,以包括您用于从blog.php重写的内容吗?title=test重写为example.com/blog/test/?感谢您的快速响应,修复了我的问题,但我对regex不是很在行。假设我使用php的url_encode来创建查询字符串。所以它就像一篇+新+文章。我应该如何允许加号进入.htaccess,因为现在,当使用加号时,它会在最后一次重写规则时转到404,这里是我们捕获标题
([\w-]+)
的地方,以便允许将加号添加到方括号中
([\w-+])
\w
表示任何字母数字,其中还包括下划线,然后是
-
破折号,然后是
+
加号,其右侧的
+
表示任何金额。