用于操作查询字符串的 Mod 重写规则


Mod-rewrite rules to manipulate query string

好的。首先,我知道在StackOverflow上,这样的问题有多个答案,但它们只帮助了我一部分。不幸的是,很多答案都非常具体,只对原始提问者的情况有帮助。因此,如果我能得到一个解释,也可以扩展到其他用户的问题(如果我需要在其他页面中使用它,也可以为自己),那就太好了。也就是说,我的问题如下:

我一直在尝试使用mod_rewrite来简化我的 URL,以便我的用户更容易在地址栏中键入。所以我必须编辑 .htaccess 以在外部隐藏.php扩展名,并编辑代码上的所有链接。我发现有效的重写规则如下:

Options +FollowSymLinks -MultiViews
RewriteEngine On
# Unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/$ http://localhost/website/$1 [R=301,L]
# Redirect external .php requests to extensionless url
RewriteCond %{THE_REQUEST} ^(.+)'.php([#?][^' ]*)?' HTTP/
RewriteRule ^(.+)'.php$ http://localhost/website/$1 [R=301,L]
# Assume php file for extensionless php urls
RewriteRule ^([^/.]+)$ $1.php [L]

这些只处理外部重定向,但对我来说,我真的不认为需要内部重定向,因为我只写 URL 的缩写形式就可以了。如果您只是将它们添加回 html 表单中,则没有理由隐藏扩展名,对吧?

我通过GET方法接收用户名来绘制用户页面。

www.webpage.com/userpage.php?view=username

我想要的是网址成为

www.webpage.com/user/username

当我最终得到一个适用于此的规则时,CSS 文件没有加载。图像可以加载或不加载取决于我使用的规则。我放弃了我写的那篇,因为它不仅这样做了,而且还在其他地方增加了路径。

RewriteRule ^(.*[^/]) userpage.php?view=$1 [QSA,L]

基本上,这条规则是将"/userpage/"应用于域上的所有链接,无论我在地址栏中键入什么。当我用用户页面键入完整的内容时.php它将其重写为用户页面/用户页面/用户。

RewriteRule ^user/('w+)/?$ userpage.php?view=$1

非常相似,做了相同的结果,但也没有显示图像。我知道这里的问题出在相对路径上,但只需将所有路径更改为绝对路径就会从代码中删除所有可移植性。

我知道我在这里真正需要的是让它只在要重写的路径中带有/user/的页面。

不仅想了解我需要对规则应用什么样的条件,只改变我想要的,而不是其他一切,而且如果有人能告诉我是否有办法让页面无法通过完整路径访问,我真的很喜欢。

例如,www.fullpath.com/user/username 显示页面,但 www.fullpath.com/userpage?view=username 无法访问。

保持你的.htaccess像这样:

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
## Unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+?)/$ $1 [R=302,L,NE]
RewriteRule ^user/([^/]+)/?$ userpage.php?view=$1 [L,QSA,NC]
# To internally forward /dir/file to /dir/file.php
RewriteCond %{DOCUMENT_ROOT}/$1'.php -f [NC]
RewriteRule ^(.+?)/?$ $1.php [L]

此外,请在页面 HTML 的 <head> 部分添加以下内容:<base href="/" />以便从该 URL 而不是当前页面的 URL 解析每个相对 URL