重写 mod 无效

rewrite mod not working

尝试了网上的几种解决方案,bud 不适合我。因此,这是我的情况,如果有人能帮助我,我会很高兴。

这是我的 httpd.conf 问题文件主要信息:

<Directory />
    Options FollowSymLinks
    AllowOverride All
</Directory>

<Directory "/var/www/html">
   Options Indexes FollowSymLinks
   AllowOverride All
   Order allow,deny
   Allow from all
</Directory>

这是我的 .htaccess 信息:

Options +FollowSymLinks
RewriteEngine On
RewriteRule ^blog([^/]*)/([^/]*)$ /post.php?bID=&title= [L]

目标是重写

来自:www.site.com/post.php?bID=7&title=blog-title 至:www.site.com/blog7/blog-title

但是它不起作用(页面加载正常但 url 未修改)!我通过http://www.generateit.net/mod-rewrite/index.php生成了重写规则,所以应该没问题。


奇怪的是,在尝试隐藏 php 扩展等其他规则时它工作正常,因此 .htaccess 规则显然有效。

## hide .php extension
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=302,L]

# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ .php [L]

有没有人猜到?

我没有发现你的规则有任何问题,请尝试禁用 mod_negotiation MultiViews:

Options -Multiviews

在使用任何 RewriteRule 之前。

使用这条规则:

RewriteCond %{THE_REQUEST} ^GET\ /post.php\?bID=(\d+)&title=([^\s&]+) [NC]
RewriteRule ^ /blog%1/%2? [R=302,L,NE]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^blog(\d+)/(.*)/?$ /post.php?bID=&title= [NE,L]