无法在 .htaccess 中正确重写和重定向网址



我正在尝试使我的网站中的网址用户友好,但服务器似乎根本没有考虑.htaccess重写命令。

该项目在localhost中,名为ecommerce。 我想"转换"这个网址:localhost/ecommerce/product?name=abclocalhost/ecommerce/product/abc.

这是 .htaccess 文件:

RewriteEngine On
RewriteBase /
## hide .php extension
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}s([^.]+).php [NC]
RewriteRule ^ %1 [R,L,NC]
## To internally redirect /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [L]
##hide /index
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}s([^.]+)index [NC]
RewriteRule ^ %1 [R,L,NC]

##HERE IS THE IMPORTANT PART
RewriteCond %{THE_REQUEST} ^(GET|POST|HEAD) /product.php?name=([^&]+)
RewriteRule ^ /product/%2/? [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?product/([^/]+)/?$ /product.php?name=$1 [L]

当我访问localhost/ecommerce/product?name=abc时,网址保持原样,当我访问localhost/ecommerce/product/abc时,我得到500 Internal Server Error

我认为 xampp httpd.conf 有问题,所以我改变了

<Directory />
AllowOverride None
Order allow,deny
Allow from all
</Directory>

<Directory />
AllowOverride All
Order allow,deny
Allow from all
</Directory>

它仍然不起作用!

从 .htaccess 中删除我隐藏.php扩展名的部分也没有任何区别。

/ecommerce/.htaccess中用这个替换你的代码:

Options -MultiViews
RewriteEngine On
RewriteBase /ecommerce/
##HERE IS THE IMPORTANT PART
RewriteCond %{THE_REQUEST} /product.php?name=([^&s]+) [NC]
RewriteRule ^ product/%1/? [L,R=301]
## hide .php extension
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} s/+(.*?/)?(?:index|(S+?)).php[/s?] [NC]
RewriteRule ^ /%1%2 [R=301,L,NE]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?product/([^/]+)/?$ product.php?name=$1 [L,NC,QSA]
## To internally redirect /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [L]

确保在新浏览器中对其进行测试,以避免旧的浏览器缓存。

最新更新