我需要从
重写我的简单网址www.marcoingraiti.it/page.php?page=servizi-di-web-design
到 www.marcoingraiti.it/servizi-di-web-design / ......
我使用这段代码:
RewriteEngine On
RewriteBase /
RewriteRule ^([^/]*)/$ /page.php?page=$1 [L]
这不起作用,但如果我添加前缀
RewriteEngine On
RewriteBase /
RewriteRule ^page/([^/]*)/$ /page.php?page=$1 [L]
并输入 www.marcoingraiti.it/page/servizi-di-web-design /
该语法有效。
为什么呢?我的第一个代码在逻辑上是正确的,我不明白,因为服务器说:
未找到。
感谢您的帮助。
答案 0 :(得分:0)
用于捕获参数中任何值的正确RegEx是
RewriteRule ^(.*)$ page.php?page=$1
答案 1 :(得分:0)
这是由循环引起的。如果您有以下规则:
RewriteRule ^([^/]*)/$ /page.php?page=$1 [L]
然后它首先匹配URI /servizi-di-web-design/
,然后它也匹配重写的URI,即/page.php
,它将继续匹配,最终你将得到内部服务器错误。
要防止出现这种情况,您需要将RewriteCond
用作:
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
# If the request is not for a valid directory
RewriteCond %{REQUEST_FILENAME} !-d
# If the request is not for a valid file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ page.php?page=$1 [L,QSA]