Mod-rewrite规则来操作查询字符串

时间:2015-01-01 00:24:28

标签: php apache .htaccess mod-rewrite path

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

我一直在尝试使用mod_rewrite将我的网址简化为更容易让用户输入地址栏的内容。 因此,我必须编辑.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 /'应用于域中的所有链接,无论我在地址栏中输入什么内容。 当我用userpage.php输入完成后,将其重写为userpage / userpage / user。

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

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

我明白我在这里真正需要的是将它改为只有/ user /的页面才能被重写。

我不仅想了解我需要应用于规则的条件只能改变我想要的东西,而不是其他所有东西,但如果有人能告诉我是否有办法,我真的很乐意通过完整路径无法访问的页面。

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

1 个答案:

答案 0 :(得分:0)

保持你的.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>的{​​{1}}部分添加此内容,以便从该网址解析每个相对网址,而不是当前网页的网址