我需要从重写我的简单url
www.marcingrati.it/page.php?page=servizi di网页设计
至www.marcingrati.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.marcingrati.it/page/servizi di web design/
这种语法是有效的。
为什么?我的第一个代码在逻辑上是正确的,我不明白,因为服务器说:
未找到。
感谢您的帮助。
捕获参数中任何值的正确RegEx是
RewriteRule ^(.*)$ page.php?page=$1
这是由循环引起的。当你有规则作为:
RewriteRule ^([^/]*)/$ /page.php?page=$1 [L]
然后首先它匹配URI/servizi-di-web-design/
,然后它也匹配重写的URI,即CCD_。
为了防止这种行为,您需要将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]