2015-04-24 44 views
0

我需要从的.htaccess重写URL不无前缀

www.marcoingraiti.it/page.php?page=servizi-di-web-design

重写我的简单的URL工作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/

这句法的作品。

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

not found.

感谢您的帮助。

+0

,我看不出为什么发生这种情况。你有没有尝试重新启动Apache? – Anonymous

+0

如何在错误/日志消息或行为问题中实现“不起作用”?顺便说一句,几乎没有人有使用'RewriteBase'的任何业务。 – mario

+0

@mario RewriteBase似乎需要.htaccess才能与一些托管提供商合作。 – Anonymous

回答

0

正确正则表达式捕捉在一个参数的任何值是

RewriteRule ^(.*)$ page.php?page=$1 
+0

这不回答问题:*为什么一个工作时,其他失败?* – Anonymous

+0

对不起,这不是我的问题的答案。 –

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]