.htaccess重写url在没有前缀的情况下不起作用



我需要从重写我的简单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]

相关内容

最新更新