1

几天来,我一直在寻找问题和答案,试图弄清楚如何完成这项工作。

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

我必须采取

http://www.mysite.com/index.php?mode=about

并让它显示为

http://www.mysite.com/about/

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

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

RewriteRule /(.*) /index.php?mode=%1 [L]

我已经改变了很多次,什么都没有。大多数网站似乎告诉我我不需要 301 重定向,但是我什么也做不了。

4

5 回答 5

0

你可以使用这个:

RewriteEngine on

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

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

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

于 2013-04-06T04:25:17.137 回答
0

解决了这个问题。感谢所有的帮助。


#< IfModule mod_rewrite.c>

# 重写引擎开启

# RewriteCond %{REQUEST_FILENAME} !-f

# RewriteCond %{REQUEST_FILENAME} !-d

#< /IfModule>

选项 +FollowSymLinks

重写引擎开启

RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?mode=$1

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

于 2013-03-01T09:28:26.950 回答
0

我必须采取

http://www.mysite.com/index.php?mode=about

并让它显示为

http://www.mysite.com/about/

人们想要两种非常常见的规则类型,您的陈述可以用两种需要不同规则的方式来解释。我将解释您的陈述,即您在 有一个真实的、可操作的脚本http://www.mysite.com/index.php?mode=about,但是您不想让用户输入那个“丑陋”的 URL,而是希望他们在输入时得到那个 URL http://www.mysite.com/about/。为此,您将执行以下操作:

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

由于存在误解的可能性,最好将您想要的内容表述为 (1) 用户将在浏览器中输入的内容以及 (2) 您想要为他们提供的真实文件。

于 2013-03-01T03:03:05.160 回答
0

对于(您的)示例,一旦您正确地从mysite.com/index.php?mode=aboutto路由mysite.com/about,现在将查看mysite.com/about/以查找接下来会发生什么(index.py/index.html/etc)。

因为 没有任何内容/about/,所以您会收到 404 错误。

我认为您不能使用 mod_rewrite 来完成您想要实现的目标,而无需在内部进行一些处理以在/about/到达那里后实际显示您想要的页面。

http://www.noupe.com/php/10-mod_rewrite-rules-you-should-know.html

记住文件系统总是优先的

服务器上的文件系统将始终优先于重写的 URL。例如,如果您有一个名为“services”的目录,并且该目录中有一个名为“design.html”的文件,则您不能将 URL 重定向到“<a href="http://domain.com/services “ rel="nofollow">http://domain.com/services”。发生的情况是 Apache 进入“服务”目录并且看不到重写指令。

要解决此问题,只需重命名您的目录(在开头或结尾添加下划线是一种简单的方法)。

于 2013-03-01T02:51:49.610 回答
0

我不相信您需要第 2 行和第 3 行,并且您似乎有 % 而不是 $,请尝试:

RewriteEngine on
RewriteRule ^([^\/]+) /index.php?mode=$1 [L]
于 2013-03-01T03:26:36.420 回答