.htaccess重写url无法使用前缀

时间:2015-04-24 00:08:51

标签: php apache .htaccess mod-rewrite rewrite

我需要从

重写我的简单网址

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 /

该语法有效。

为什么呢?我的第一个代码在逻辑上是正确的,我不明白,因为服务器说:

  

未找到。

感谢您的帮助。

2 个答案:

答案 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]