重写 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]
尝试了网上的几种解决方案,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]