Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php .htaccess重写url在没有前缀的情况下无法工作_Php_Apache_.htaccess_Mod Rewrite_Rewrite - Fatal编程技术网

Php .htaccess重写url在没有前缀的情况下无法工作

Php .htaccess重写url在没有前缀的情况下无法工作,php,apache,.htaccess,mod-rewrite,rewrite,Php,Apache,.htaccess,Mod Rewrite,Rewrite,我需要重写我的简单网址从 www.marcingraiti.it/page.php?page=servizi di网页设计 访问www.marcingraiti.it/servizi-di-web-design/ 我使用这个代码: RewriteEngine On RewriteBase / RewriteRule ^([^/]*)/$ /page.php?page=$1 [L] 这不起作用,但如果我添加前缀 RewriteEngine On RewriteBase / RewriteRule

我需要重写我的简单网址从

www.marcingraiti.it/page.php?page=servizi di网页设计

访问www.marcingraiti.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.marcingraiti.it/page/servizi-di-web-design/

这种语法有效

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

没有找到


谢谢您的帮助。

捕捉参数中任何值的正确正则表达式是

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

这是由循环引起的。当您有以下规则时:

RewriteRule ^([^/]*)/$ /page.php?page=$1 [L]
然后首先它匹配URI/servizi di web design/,然后它还匹配重写的URI,即/page.php,它将继续匹配,最终您将得到内部服务器错误

要防止此行为,您需要将RewriteCond用作:


这并没有回答人们提出的问题:为什么一个工作而另一个失败?很抱歉,这不是我问题的答案。仅凭这些信息,我看不出为什么会发生这种情况。您是否尝试重新启动Apache?如何在错误/日志消息或行为问题中实现不工作?顺便说一句,几乎没有人使用RewriteBase。@mario RewriteBase似乎是.htaccess与某些主机提供商合作所必需的。这是一个错误:-marcingraiti.it-AH00687:Negotiation:discovered files matching request:/web/htdocs/www.marcingraiti.it/home/servizi-di-web-design无法协商。,也许是匿名的。这可能是奇怪的FCGI处理程序路径,或者复杂的vhost模板问题,如果有的话。对我来说,它看起来总是一字不差地抄袭了一些教程。就像/绝对重写目标一样;这通常会导致内部重定向。
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]