0

http://localhost/clean_urls/user/whtffgh很好地重定向到这个http://localhost/clean_urls/user/whtffgh/(我放在那里的几乎所有东西都有效)。

http://localhost/clean_urls/user/cohen但是,重定向到这个 http://localhost/clean/,我不知道为什么。它应该只添加一个/

这是我的 .htaccess 代码

<ifModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !(.*)/$
    RewriteRule ^(.*)$ /clean_urls/user/$1/ [L,R=301]

    RewriteBase /clean_urls/user/

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

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


</ifModule>

更新:

除了我将 cohen 作为用户名之外,该代码还有效。.htaccess 文件的第二部分user/index.php?user=username看起来像user/username这样,它只是一个 $_GET 变量,在 url 中看起来不错并且对 SEO 友好(显然)。

我只是在学习这些东西并制作一个 webapp 来试用它,所以不确定它的去向,但我确实认为我最终需要另一个变量。http:://localhost/clean_urls/user/fred/someverb

4

1 回答 1

1

您误解了 RewriteBase 指令的用途。它帮助重写引擎在“每个目录”上下文中将相对 URI 转换为正确的文件名等价物。

每个文件应该只有一个RewriteBase 指令。.htaccess默认情况下,重写引擎将使用路径上带有指令集的最低.htaccess文件。RewriteEngine On

所以在 DOCroot 中(即“GET /xxx”映射到的目录,这应该是

RewriteBase /

如果您的.htaccess文件在其中,DOCroot/clean_urls/user那么它应该有

RewriteBase /clean_urls/user/

您想如何解码表单的 URI,http:://localhost/fred或者您只想处理表单的 URI http:://localhost/clean_urls/user/fred/。怎么样http:://localhost/clean_urls/user/fred/someverb

让我知道你把你​​放在哪里,.htaccess然后我可以给你正确的内容。

于 2012-07-06T12:10:44.113 回答