Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.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
Mod rewrite 为URL重写Mod__Mod Rewrite - Fatal编程技术网

Mod rewrite 为URL重写Mod_

Mod rewrite 为URL重写Mod_,mod-rewrite,Mod Rewrite,几天来,我一直在寻找问题和答案,试图找出如何使这项工作 到目前为止,我可以更改我的URL,但它不会加载页面 我得走了 让它显示为 到目前为止,我有以下代码: RewriteEngine on RewriteCond %{QUERY_STRING} ^mode=(.*) RewriteRule ^ http\:\/\/\www.mysite.com\/%1? [R=301,L] RewriteRule /(.*) /index.php?mode=%1 [L] 我已经改变了很多次,但什么都没

几天来,我一直在寻找问题和答案,试图找出如何使这项工作

到目前为止,我可以更改我的URL,但它不会加载页面

我得走了

让它显示为

到目前为止,我有以下代码:

RewriteEngine on
RewriteCond %{QUERY_STRING} ^mode=(.*)
RewriteRule ^ http\:\/\/\www.mysite.com\/%1? [R=301,L]

RewriteRule /(.*) /index.php?mode=%1 [L]
我已经改变了很多次,但什么都没有。大多数网站似乎告诉我,我不需要301重定向,但这样我就什么也做不到了。

以(你的)为例,一旦你正确地从
mysite.com/index.php?mode=about
路由到
mysite.com/about
,它现在将查看
mysite.com/about/
以找到下一步(index.py/index.html/etc)

因为
/about/
中没有任何内容,所以您将得到一个404错误

我认为,如果不在
/about/
中进行一些处理,就无法使用mod_rewrite来实现您想要实现的目标,从而在到达那里后实际显示您想要的页面

请记住,文件系统始终优先

服务器上的文件系统将始终优先于 重写的URL。例如,如果您有一个名为“services”的目录 在该目录中有一个名为“design.html”的文件,您不能 将URL重定向到“”。发生的是 Apache进入“services”目录,没有看到 重写指令

要解决此问题,只需重命名目录(在 开始或结束是一种简单的方法)

我得走了

让它显示为

人们需要两种非常常见的规则类型,您的语句可以用两种需要不同规则的方式进行解释。我将解释你的陈述,你在
http://www.mysite.com/index.php?mode=about
,但是您希望用户在输入
http://www.mysite.com/about/
。要完成此操作,请执行以下操作:

RewriteRule ^about/?$ /index.php?mode=about [L]

由于可能会产生误解,最好说明您想要什么(1)用户将在其浏览器中输入什么,以及(2)您想要为他们提供什么真正的文件。

我认为您不需要第2行和第3行&您似乎有%而不是$,请尝试:

RewriteEngine on
RewriteRule ^([^\/]+) /index.php?mode=$1 [L]

解决了这个问题。谢谢你的帮助


#

#重新启动发动机

#重写cond%{REQUEST_FILENAME}-f

#重写cond%{REQUEST_FILENAME}-d

#

选项+FollowSymLinks

重新启动发动机

重写规则^([a-zA-Z0-9_-]+)$index.php?模式=$1

重写规则^([a-zA-Z0-9_-]+)/$index.php?模式=$1

您可以使用以下方法:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME}  -d
RewriteRule  ^.*$  -  [L]

RewriteRule ^([^/]+)/$  /index.php?mode=$1 [L]

开始处仍然允许访问其他文件夹。

因此URL确实会更改(表明您的重写工作正常),但当您在
/about/
结束时,页面
index.php?mode=about
不会加载?或者您是否需要修复重写,以便它正确地路由到
/about/
?是的,这是正确的。我的页面错误是“找不到页面”,但它确实显示了我希望在地址barI中显示的正确信息。我说,如果您只打开
RewriteEngine
RewriteRule/(.*)/index.php?mode=%1[L]
,并去掉其余部分,它应该会起作用。我已经试过了,这似乎是大多数网站都说要做的,但当我去掉其他部分时,什么都不起作用。只是再次尝试以确保。当我删除这两行代码时,网站的工作原理就像没有代码一样。当我使用你建议的内容时,什么也不会发生。我的站点的行为与代码不存在时的行为相同。内部服务器错误服务器遇到内部错误或配置错误,无法完成您的请求。请与服务器管理员联系,webmaster@mysite.com并告知他们错误发生的时间,以及您可能采取的任何可能导致错误的措施。有关此错误的详细信息,请参阅服务器错误日志。此外,尝试使用ErrorDocument处理请求时遇到500内部服务器错误。@Ni Ck,在底部用另一个版本更新了答案;)当我尝试加载站点时,我又遇到了一个内部服务器错误。我不确定我是否遵守了。我应该用下划线重命名哪个目录?是在名字前面还是后面?我明白了。虽然这个网站上可能有很多类似的答案,但我建议将这个答案标记为已接受,这样其他人就会看到正确的答案。您也可以通过添加两行代码将两行合并为一行?在右括号之后,可能会添加查询字符串(例如:
RewriteRule^([a-zA-Z0-9_-]+)/?$index.php?mode=$1&%{QUERY\u STRING}
),这样,如果您想在新URL之后有额外的变量,就不会松开它,例如
/about/?anotherVar=extra
,这与
index.php?mode=about&anotherVar=extra
相同。这是一个很好的观点。谢谢我要到明天才能检查它。我怎样才能得到第二个变量并将其屏蔽为?因此,我没有使用/about/?anotherVar=extra,而是使用/about/extra。第二个变量将出现在一些页面上,而不是所有的
^([a-zA-Z0-9_-]+)(/([a-zA-Z0-9_-]+)?/?$index.php?mode=$1&anotherVar=$3&%{QUERY_STRING}
我应该更清楚一点。它可以工作并加载我的页面,但我丢失了部分页面。我在索引页面上使用了,mode变量将内容信息加载到template.php中。当我向URL添加/oliveOil时,它会加载正确的页面,但不会加载template.php。是否有解决方案,或者我必须坚持在URL中使用/products?productContent=oliveOil?